从视图ROR渲染表单部分

时间:2014-10-06 15:44:52

标签: ruby-on-rails ruby forms partial

我试图在我的视图中从另一个控制器渲染表单。

这是posts_index,渲染post.com可以正常工作,但新评论的表单并不适用。

<% @posts.each do |post| %>
  <%= link_to post.title, post %>
    <%= simple_format post.text %>
      <%= render post.comments.order('created_at DESC').all %>
      <%= render :partial => '/comments/form', locals: {post: post} %>

我收到此错误:未定义的方法`评论&#39;为零:NilClass

评论表:

<%= form_for([@post, @post.comments.build]) do |f| %>
  <%= f.label :Comment %><br />
  <%= f.text_area :body, :class => "comment_text_box" %>
  <%= f.submit %>
<% end %>

我知道我需要将post.com传递给表单,但无法弄清楚如何。

Post_show适用于<%= render "comments/form" %>

发布和评论为has_many关系,发布has_many条评论。

谢谢你的期待。

2 个答案:

答案 0 :(得分:1)

您需要将变量传递到您的部分中,如下所示:

<% @posts.each do |post| %>
  <%= link_to post.title, post %>
  <%= simple_format post.text %>
  <%= render post.comments.order('created_at DESC').all %>
  <%= render partial: '/comments/form', locals: {post: post} %>
<% end %>

并将您的表单部分更改为:

<%= form_for([post, post.comments.build]) do |f| %>
  // form fields
<% end %>

答案 1 :(得分:0)

当你要求部分时,你需要发送与之相关的帖子。它看起来像这样:

<% @posts.each do |post| %>
  <%= link_to post.title, post %>
    <%= simple_format post.text %>
      <%= render post.comments.order('created_at DESC').all %>
      <%= render :partial => '/comments/form', post: post%>