以下表单在代码中做了什么?

时间:2017-04-02 10:16:47

标签: ruby-on-rails ruby-on-rails-4

<%= 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

2 个答案:

答案 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。

另外,请查看以下链接以获取更多信息:

Rails Routing

Rails Form Helpers