初学者 Rails 增删改查
Beginner Rails CRUD
关于 new
和 create
方法的快速初学者问题。 Ruby 指南显示了这个例子:
def new
@article = Article.new
end
def create
@article = Article.new(article_params)
if @article.save
redirect_to @article
else
render 'new'
end
end
在指南的另一个示例中,new
方法中没有使用语句 @article = Article.new
,这对我来说更有意义。 new
视图不需要 @article,form_for
接受模型名称的参数,然后定义一个变量供表单方法在 |something|
中使用。那么为什么我们需要建立 @article = Article.new
并有 @article
可用于视图?
您正在为 "create" 一篇文章编写表单,文章 class 可能有一些您可能希望在表单中显示的默认值,这样您就不必在视图本身中处理它。
同样如此,无论你有什么默认值,它都在同一个位置,你不需要更新两个文件。
下面两者是等价的 -
1. form_for(@article...........) /* @article = Article.new */
2. form_for(:article...........)
有关详细信息,请参阅 http://apidock.com/rails/ActionView/Helpers/FormHelper/form_for
但是,在 Rails 中,我们编写了 DRY 代码。因此,我们对 new
和 edit
方法使用相同的 article_form
和实例变量 @article
是的,这个实例变量在视图中可用 -
def new
@article = Article.new /* this is new article */
end
def edit
@article = Article.find params[:id] /* Already exists in database */
end
并查看文件 -
new.html.erb 和 edit.html.erb 具有相同的形式
<%= render "article_form" %>
根据文档 (http://guides.rubyonrails.org/form_helpers.html#binding-a-form-to-an-object),您的表单(如果使用 form_for
创建)需要一个模型实例来将输入绑定到模型属性。这样你就说你有一个新的 article
实例并且你的表单字段映射到它的属性,所以当提交表单时,你会收到以下形式的参数:
articles: {attributte1: 'something', attributte2: 'somethingelse'}
这样你就可以通过说 @article = Article.new(article_params)
来填充一个对象的实例,因为 article_params
被填充在你的控制器中的某个地方。
关于 new
和 create
方法的快速初学者问题。 Ruby 指南显示了这个例子:
def new
@article = Article.new
end
def create
@article = Article.new(article_params)
if @article.save
redirect_to @article
else
render 'new'
end
end
在指南的另一个示例中,new
方法中没有使用语句 @article = Article.new
,这对我来说更有意义。 new
视图不需要 @article,form_for
接受模型名称的参数,然后定义一个变量供表单方法在 |something|
中使用。那么为什么我们需要建立 @article = Article.new
并有 @article
可用于视图?
您正在为 "create" 一篇文章编写表单,文章 class 可能有一些您可能希望在表单中显示的默认值,这样您就不必在视图本身中处理它。
同样如此,无论你有什么默认值,它都在同一个位置,你不需要更新两个文件。
下面两者是等价的 -
1. form_for(@article...........) /* @article = Article.new */
2. form_for(:article...........)
有关详细信息,请参阅 http://apidock.com/rails/ActionView/Helpers/FormHelper/form_for
但是,在 Rails 中,我们编写了 DRY 代码。因此,我们对 new
和 edit
方法使用相同的 article_form
和实例变量 @article
是的,这个实例变量在视图中可用 -
def new
@article = Article.new /* this is new article */
end
def edit
@article = Article.find params[:id] /* Already exists in database */
end
并查看文件 -
new.html.erb 和 edit.html.erb 具有相同的形式
<%= render "article_form" %>
根据文档 (http://guides.rubyonrails.org/form_helpers.html#binding-a-form-to-an-object),您的表单(如果使用 form_for
创建)需要一个模型实例来将输入绑定到模型属性。这样你就说你有一个新的 article
实例并且你的表单字段映射到它的属性,所以当提交表单时,你会收到以下形式的参数:
articles: {attributte1: 'something', attributte2: 'somethingelse'}
这样你就可以通过说 @article = Article.new(article_params)
来填充一个对象的实例,因为 article_params
被填充在你的控制器中的某个地方。