安装 Ruby on Rails

创建应用

MacOS 平台

# 创建新的应用程序
$ rails new blog
$ cd blog
# 安装 yarn
$ brew install yarn
# 安装 webpacker
$ rails webpacker:install
# 启动服务器
$ rails server
# http://localhost:3000 可访问网页

Windows 平台

  • 创建新的应用程序
  • 安装 yarn
  • 安装 node
  • 安装 webpacker

官方示例

Rails 入门

控制器生成器

使用 generate controller 命令(控制器生成器)来自动生成控制器(controller),视图(view) 以及动作(action)

# 生成 Welcome 控制器以及它的 index 动作
$ rails generate controller Welcome index

主要生成下面两个文件

  • app/controllers/welcome_controller.rb

    控制器文件
  • app/views/welcome/index.html.erb

    嵌入式Ruby文件
  • http://localhost:3000/welcome/index

    Rails 将把该请求映射为 Welcome 控制器的 index 动作

路由

通过修改 config/routes.rb 文件来设定路由

Rails.application.routes.draw do
get 'welcome/index'
resources :articles do
resources :comments
end
root 'welcome#index'
end

使用 routes 命令来确认路由

$ rails routes
Prefix Verb URI Pattern Controller#Action
welcome_index GET /welcome/index(.:format) welcome#index
article_comments GET /articles/:article_id/comments(.:format) comments#index
POST /articles/:article_id/comments(.:format) comments#create
new_article_comment GET /articles/:article_id/comments/new(.:format) comments#new
edit_article_comment GET /articles/:article_id/comments/:id/edit(.:format) comments#edit
article_comment GET /articles/:article_id/comments/:id(.:format) comments#show
PATCH /articles/:article_id/comments/:id(.:format) comments#update
PUT /articles/:article_id/comments/:id(.:format) comments#update
DELETE /articles/:article_id/comments/:id(.:format) comments#destroy
articles GET /articles(.:format) articles#index
POST /articles(.:format) articles#create
new_article GET /articles/new(.:format) articles#new
edit_article GET /articles/:id/edit(.:format) articles#edit
article GET /articles/:id(.:format) articles#show
PATCH /articles/:id(.:format) articles#update
PUT /articles/:id(.:format) articles#update
DELETE /articles/:id(.:format) articles#destroy
root GET / welcome#index

Articles Comments 控制器

# 生成 Articles 控制器
$ rails generate controller Articles
# 生成 Comments 控制器
$ rails generate controller Comments

Article Comment 模型

# 生成 Article 模型,然后创建 db
$ rails generate model Article title:string text:text
$ rails db:migrate
# 生成 Comment 模型,然后更新 db
$ rails generate model Comment commenter:string body:text article:references
$ rails db:migrate

模型生成器主要生成下面两种文件

  • app/models/article.rb

    app/models/comment.rb

    模型文件
  • db/migrate/20200504035451_create_articles.rb

    db/migrate/20200504050736_create_comments.rb

    数据迁移指令Ruby文件

模型类代码

app/models/article.rb 文件

class Article < ApplicationRecord
has_many :comments, dependent: :destroy
validates :title, presence: true,
length: { minimum: 5 }
end

app/models/comment.rb 文件

class Comment < ApplicationRecord
belongs_to :article
end

控制器类代码

app/controllers/articles_controller.rb 文件

class ArticlesController < ApplicationController

  http_basic_authenticate_with name: "dhh", password: "secret", except: [:index, :show]

  def index
@articles = Article.all
end def show
@article = Article.find(params[:id])
end def new
@article = Article.new
end def edit
@article = Article.find(params[:id])
end def create
@article = Article.new(article_params) if @article.save
redirect_to @article
else
render 'new'
end
end def update
@article = Article.find(params[:id]) if @article.update(article_params)
redirect_to @article
else
render 'edit'
end
end def destroy
@article = Article.find(params[:id])
@article.destroy redirect_to articles_path
end private
def article_params
params.require(:article).permit(:title, :text)
end
end

下面是该控制器类所包含的方法以及它们所对应的路由

  • index(列表)GET /articles
  • show(显示)GET /articles/:id
  • new(新建)GET /articles/new
  • edit(编辑)GET /articles/:id/edit
  • create(创建)PATCH/POST /articles
  • update(更新)PUT /articles/:id
  • destroy(删除)DELETE /articles/:id

app/controllers/comments_controller.rb 文件

class CommentsController < ApplicationController

  http_basic_authenticate_with name: "dhh", password: "secret", only: :destroy

  def create
@article = Article.find(params[:article_id])
@comment = @article.comments.create(comment_params)
redirect_to article_path(@article)
end def destroy
@article = Article.find(params[:article_id])
@comment = @article.comments.find(params[:id])
@comment.destroy
redirect_to article_path(@article)
end private
def comment_params
params.require(:comment).permit(:commenter, :body)
end
end

下面是该控制器类所包含的方法以及它们所对应的路由

  • create(创建)PATCH/POST /articles/:article_id/comments
  • destroy(删除)DELETE /articles/:article_id/comments/:id

welcome 视图代码

app/views/welcome/index.html.erb 文件

<h1>Hello, Rails!</h1>
<%= link_to 'My Blog', controller: 'articles' %>

articles 视图代码

app/views/articles/_form.html.erb 文件

<%= form_with model: @article, local: true do |form| %>

  <% if @article.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(@article.errors.count, "error") %> prohibited
this article from being saved:
</h2>
<ul>
<% @article.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %> <p>
<%= form.label :title %><br>
<%= form.text_field :title %>
</p> <p>
<%= form.label :text %><br>
<%= form.text_area :text %>
</p> <p>
<%= form.submit %>
</p> <% end %>

app/views/articles/edit.html.erb 文件

<h1>Edit article</h1>

<%= render 'form' %>

<%= link_to 'Back', articles_path %>

app/views/articles/index.html.erb 文件

<h1>Listing articles</h1>

<%= link_to 'New article', new_article_path %>

<table>
<tr>
<th>Title</th>
<th>Text</th>
<th></th>
</tr> <% @articles.each do |article| %>
<tr>
<td><%= article.title %></td>
<td><%= article.text %></td>
<td><%= link_to 'Show', article_path(article) %></td>
<td><%= link_to 'Edit', edit_article_path(article) %></td>
<td><%= link_to 'Destroy', article_path(article),
method: :delete,
data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</table>

app/views/articles/new.html.erb 文件

<h1>New article</h1>

<%= render 'form' %>

<%= link_to 'Back', articles_path %>

app/views/articles/show.html.erb 文件

<p>
<strong>Title:</strong>
<%= @article.title %>
</p> <p>
<strong>Text:</strong>
<%= @article.text %>
</p> <h2>Comments</h2>
<%= render @article.comments %> <h2>Add a comment:</h2>
<%= render 'comments/form' %> <%= link_to 'Edit', edit_article_path(@article) %> |
<%= link_to 'Back', articles_path %>

comments 视图代码

app/views/articles/_comment.html.erb 文件

<p>
<strong>Commenter:</strong>
<%= comment.commenter %>
</p> <p>
<strong>Comment:</strong>
<%= comment.body %>
</p> <p>
<%= link_to 'Destroy Comment', [comment.article, comment],
method: :delete,
data: { confirm: 'Are you sure?' } %>
</p>

app/views/articles/_form.html.erb 文件

<%= form_with(model: [ @article, @article.comments.build ], local: true) do |form| %>
<p>
<%= form.label :commenter %><br>
<%= form.text_field :commenter %>
</p>
<p>
<%= form.label :body %><br>
<%= form.text_area :body %>
</p>
<p>
<%= form.submit %>
</p>
<% end %>

参考链接

Ruby on Rails

Ruby on Rails 开发笔记的更多相关文章

  1. [Ruby on Rails系列]2、开发环境准备:Ruby on Rails开发环境配置

    前情回顾 上次讲到Vmware虚拟机的安装配置以及Scientific Linux 6.X系统的安装.这回我们的主要任务是在Linux操作系统上完成Ruby on Rails开发环境的配置. 在配置环 ...

  2. 开发环境准备:Ruby on Rails开发环境配置

    开发环境准备:Ruby on Rails开发环境配置 前情回顾 上次讲到Vmware虚拟机的安装配置以及Scientific Linux 6.X系统的安装.这回我们的主要任务是在Linux操作系统上完 ...

  3. 在linux,windows上安装ruby on rails开发环境

    ruby是一个非常优秀的语言,ruby的精髓rails可以让web开发的效率成倍的提高,下面就介绍一下我搭建rails环境的过程.windows下搭建ruby rails web开发环境本篇文章主要是 ...

  4. 各种环境下搭建ruby on rails开发环境

    win10上搭建raby on rails环境: 步骤如下 1.安装ruby (我选择的版本是ruby 2.2.3p173) 2.安装rails gem 在这之前建议先把gem的源换成淘宝的源,速度快 ...

  5. Ruby on Rails开发Web应用的基本概念

    Web应用架构 C/S架构 Web应用从最初就採用C/S架构.Server负责监听client请求,提供资源,Client向server发起请求并渲染页面.两者通过TCP/IP协议栈之上的HTTP协议 ...

  6. 用VirtualBox和vagrant在win7&#215;64上搭建ruby on rails 开发环境

    下载准备 1.vagrant 官方  WINDOWS Universal (32 and 64-bit) http://www.vagrantup.com/downloads.html 2.Virtu ...

  7. [QuickRoR]Ruby on Rails开发环境安装

    1.Setup Ruby on Rails2.Test Web App3.Create the First Web App 1.Setup Ruby on Rails1) Download rubyi ...

  8. win7安装ruby on rails开发环境

    前言 我们看到很多文章说ruby环境windows它是非常困难的基础上,这将是各种稀奇古怪的问题,因此,建议linux和mac发. 可是我依照教程搭了下,问题也不算太多.总过大概花费了2个半小时左右就 ...

  9. Ruby on rails学习笔记——安装环境

    出现问题: C:\Users\len>gem install rails ERROR: While executing gem ... (Gem::RemoteFetcher::FetchErr ...

随机推荐

  1. 解决java新开页面被拦截的问题

    在开发中遇到from表单利用 target="_blank" 属性新开页面时被拦截. 用ajax让form表单提交,这时有可能浏览器会拦截新开页面,这时只 需要设置 ajax 同步 ...

  2. docker-compose up使用自定义的网段的两种方式(从其根源指定)

    问题描述         还是那个研究安全大业的同事,在部署他的秘密武器,是用docker-compose部署的,有差不多20多个docker-compose.yml文件,然后由于docker-com ...

  3. NFC 大电池 高性价比手机

    NFC 大电池 高性价比手机三星 Galaxy A60元气版 黑瞳全视屏 3200万超广角拍照手机 骁龙675 6GB+64GB 丹宁黑 全网通4G 双卡双待 1499 https://item.jd ...

  4. .net core2.0获取host的方法

    Example there's an given url: http://localhost:4800/account/login 获取整个url地址: 在页面(cstml)中 Microsoft.A ...

  5. HttpWebResponse Post 前端控件数据,后台如何接收?

    MVC视图页: @{ Layout = null; } <!DOCTYPE html> <html> <head> <title>test</ti ...

  6. MariaDB的安装与启动

    MariaDB的安装与启动 1.安装前需要删除系统已存在的mysql及mariadb [root@vm172--- ~]# rpm -qa|grep mysql [root@vm172--- ~]# ...

  7. 【Jmeter】Address already in use : connect &&Permission denied: connect 解决方案

    Address already in use : connect   该问题的原因为: Windows 提供给 TCP/IP链接的端口为 1024-5000,并且要四分钟来循环回收他们.就导致我们在短 ...

  8. SQL优化经验

    SQL 优化经验总结34条   我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习.摘录.并汇总部分资料与大家分享!   (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效 ...

  9. squid 3.5 window x64

    下载1: https://download.csdn.net/download/runliuv/11131620 下载2: 链接: https://pan.baidu.com/s/1A_o_Xvg1y ...

  10. iOS业务模块化利用CocoaPod入门实践

    iOS业务模块化即是通过不同的工程管理不同的业务,通常应用在中大型项目中,这样做的好处主要有:1.多人开发时,防止工程文件冲突  2.能够为下个不同的项目抽取代码,话不多说,直接看步骤:括号内容为本例 ...