我正在按照本教程http://guides.rubyonrails.org/v3.2.13/getting_started.html在版本 3.2.13 中构建我的 rails 应用程序。如果您转到第 6.9 节,您将找到用于创建新帖子的控制器和视图。在这里,我不明白@post
变量是如何从new
一个动作传递到另一个create
动作的,函数在哪里create
调用?此外,我在工作edit
和更新时也遇到了同样的问题actions
。请指导我完成这个。
问问题
2417 次
2 回答
10
它不会传递给create
动作,它会使用您从显示new
动作的表单传递的参数再次实例化。
create
使用 POST 请求调用 action 到 config/routes.rb 中指定的路径,从而导致特定的控制器和操作。
于 2013-09-25T13:55:47.520 回答
2
@post
不从散列传递到创建方法new
,然后使用模型而不是控制器的方法进行设置。调用然后返回对象。返回对象而不保存,然后返回对象的有效性。这就是为什么控制器中的 create 方法调用然后有一个条件语句。它基本上是说初始化这个对象,然后如果它是一个有效的对象,则做一件事,如果它不是另一件事。由于此检查,未调用创建操作。create
params
@post
new
create
new
save
new
save
new
save
#this will return true if valid or false if invalid
Post.new(params[:post]).save
#this will always return the Post object which conditionally is true in Ruby
Post.create(params[:post])
#To use the create in a conditional statement it would be
Post.create(params[:post]).valid? || Post.create(param[:post]).save
最后一行是不必要的冗余,因此示例使用new
后跟save
.
create
模型的方法更简洁,但最好在您知道对象有效时使用。
希望这能让您更好地理解,但如果您仍然感到困惑,请告诉我,我会尝试进一步解释。
于 2013-09-25T17:18:13.977 回答