【问题标题】:Displaying Nested Scaffolds on Index在索引上显示嵌套脚手架
【发布时间】:2011-08-16 03:48:02
【问题描述】:

我正在尝试在 posts/index.html.erb 上显示类似的内容

Post #1
  Comment #1 for Post #1
  Comment #2

Post #2
  Comment #1 for Post #2

etc.

如果我转到 /posts/1/cmets/、/posts/2/cmets/ 等,它工作正常

因为它使用的是索引文件,所以 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>

谢谢!

【问题讨论】:

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


    【解决方案1】:

    好吧,既然 cmets 属于给定帖子,您只需要在视图中有一个单独的循环来迭代给定帖子的每个 cmets。

    因此,将@cmets var 从您的控制器和索引视图中取出,并在索引视图中执行此操作,而不是在您当前拥有@cmets 的位置:

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

    我创建了用户名和文本属性,当然您可以使用评论模型中的任何内容。

    伊恩。

    【讨论】:

    • 太棒了,效果很好。也比我做的容易得多。
    猜你喜欢
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 2015-03-03
    相关资源
    最近更新 更多