3

我正在按照本教程http://guides.rubyonrails.org/v3.2.13/getting_started.html在版本 3.2.13 中构建我的 rails 应用程序。如果您转到第 6.9 节,您将找到用于创建新帖子的控制器和视图。在这里,我不明白@post变量是如何从new一个动作传递到另一个create动作的,函数在哪里create调用?此外,我在工作edit和更新时也遇到了同样的问题actions。请指导我完成这个。

4

2 回答 2

10

它不会传递给create动作,它会使用您从显示new动作的表单传递的参数再次实例化。

create使用 POST 请求调用 action 到 config/routes.rb 中指定的路径,从而导致特定的控制器和操作。

于 2013-09-25T13:55:47.520 回答
2

@post不从散列传递到创建方法new,然后使用模型而不是控制器的方法进行设置。调用然后返回对象。返回对象而不保存,然后返回对象的有效性。这就是为什么控制器中的 create 方法调用然后有一个条件语句。它基本上是说初始化这个对象,然后如果它是一个有效的对象,则做一件事,如果它不是另一件事。由于此检查,未调用创建操作。createparams@postnewcreatenewsavenewsavenewsave

#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 回答