<%= form_for [@blog,@blog.comments.build] do |f| %>
<p><%= f.text_area :text, :size => '40x10' %> </p>
<p><%= f.submit "Post Comment" %> </p>
<% end %>
这是comments_controller的处理程序,但我想知道原因,特别是对于form_for
答案 0 :(得分:0)
它添加了一个带有文本框的表单,提交按钮和一些隐藏的身份验证相关的隐藏字段,用于输入注释。 注释将添加到@blog对象中,关系为:
has_many:评论
注释是由代码构建的,如果不存在则由:
@ blog.comments.build
总的来说,你会得到一个表格,用于在@博客对象中输入评论。在这种情况下,博客对象是必需的,评论将自动合并到评论记录列中的正确列中的博客条目&#34; blog_id&#34;默认情况下。
这称为嵌套表格关系,而不是只编辑一条评论记录,您也可以组合父对象并进行编辑。
build主要用于为对象创建一个结构,比如new(例如Model.new)。表单操作是根据给定的对象决定的。在您的情况下,对象是@blog和@blog.comments.build,因此调用的操作将是更新Blog控制器或创建注释控制器..
希望这有帮助。
答案 1 :(得分:0)
$this->load->library('upload', $config);
创建一个表单,用于创建或更新传递的对象。如果对象未持久化,则关联的URL将以创建操作为目标。否则,目标操作将更新。 form_for
可以接收许多不同类型的参数来生成表单。
如果您查看Rails form_for
文档,您会发现可以执行以下操作:
url_helpers
这将生成指向博客第一条评论的链接,其中包含<%= link_to 'First comment', blog_comment_path([@blog, @blog.comments.first]) %>
这样的路径。这也假设您在/posts/@post.id/comments/@post.comments.first.id
上设置了正确的设置:
routes.rb
通过这种方式,您可以生成一堆可用于构建的路径,例如链接和表单。因此,代码中的resources :blogs do
resources :comments
end
的工作方式类似。把它想象成url_helper。您有form_for
和与帖子关联的评论(@blog
)。由于评论尚未保留,因此将生成一个表单,用于创建定位@blog.comments.build
的评论。关联的路径类似于CommentsController#create
,HTTP方法将是POST。
另外,请查看以下链接以获取更多信息: