在索引上显示嵌套支架

时间:2011-04-30 17:45:42

标签: ruby-on-rails ruby-on-rails-3 view controller scaffold

我正试图在posts / index.html.erb

上显示类似的内容
Post #1
  Comment #1 for Post #1
  Comment #2

Post #2
  Comment #1 for Post #2

etc.

如果我去/ posts / 1 / comments /,/ posts / 2 / comments / etc

由于它使用的是索引文件,因此URL中没有:post_id,它会抛出一个nil错误。模型使用适当的have_many和belongs_to。

这是routes.rb的一部分

resources :posts do
  resources :comments
end

resources :posts

这是我的posts_controller.rb

的一部分
def index
@posts = Post.all
@comments = params[:post_id][:desc]

respond_to do |format|
  format.html # index.html.erb
  format.xml  { render :xml => @posts }
 end
end

这是index.html.erb的一部分

<% @posts.each do |post| %>
  <tr>
    <td><%= post.title %></td>
    <td><%= link_to 'Show', post %></td>
    <td><%= link_to 'Edit', edit_post_path(post) %></td>
    <td><%= link_to 'Destroy', post, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<tr><td><%= @comments %></td></tr>
<% end %>
</table>

谢谢!

1 个答案:

答案 0 :(得分:1)

好吧,因为评论属于某个帖子,你只需要在视图中有一个单独的循环来迭代给定帖子的每个评论。

所以从你的控制器和索引视图中取出@comments var,并在索引视图中执行此操作,而不是当前有@comments的地方:

<% for comment in post.comments %>
  <tr><td><%= comment.user_name %><%= comment.text %></td></tr>
<% end %>

我使用了user_name和文本,当然你会使用评论模型中的任何内容。

伊恩。