Rails视图中断然而控制台没有

时间:2014-08-22 17:03:48

标签: ruby-on-rails ruby ruby-on-rails-3 associations

我正在关注有关rails的教程,并且我面对一种奇怪的(我看待它的方式)的事情。

我有一个包含1个帖子和3条评论的数据库。注释和帖子在不同的表中分开,但注释具有指向posts表的外键属性。第一篇文章有​​2条与之相关的评论,rails控制台显示了这些评论。

p = Post.all
first = p[0]
comments = first.comments // Returns all the comments that have the post_id equal with the first post

当我在我看来试图看到这些问题时会出现问题。我导航到localhost:3000/posts/3/comments/,我看到了所有评论,但我只想查看与该帖子相关的评论。 (在我的例子中,id为3的帖子)

这是我的routes.rb

Rails.application.routes.draw do
  resources :comments

  resources :posts do
      resources :comments
  end
end

注意 当我调用comments方法返回正确的注释时,控制台表现正常(只有那些与帖子相关但是视图显示所有注释不仅仅是相关的

以下是模型:

class Post < ActiveRecord::Base
  has_many :comments, dependent: :destroy
end

class Comment < ActiveRecord::Base
  belongs_to :post
end

以下是comments/index.html.erb

<h1>Listing comments</h1>

<table>
  <thead>
    <tr>
      <th>Post</th>
      <th>Body</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @comments.each do |comment| %>
      <tr>
        <td><%= comment.post_id %></td>
        <td><%= comment.body %></td>
        <td><%= link_to 'Show', comment %></td>
        <td><%= link_to 'Edit', edit_comment_path(comment) %></td>
        <td><%= link_to 'Destroy', comment, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

<br>

<%= link_to 'New Comment', new_comment_path %>

以下是comments_controller

class CommentsController < ApplicationController
  before_action :set_comment, only: [:show, :edit, :update, :destroy]

  # GET /comments
  # GET /comments.json
  def index
    @comments = Comment.all
  end
end

1 个答案:

答案 0 :(得分:0)

  

我看到了所有评论,但我只想查看与该帖子相关的评论

在您的索引操作中,您将拥有类似

的内容
@comments = Comment.all # this will have all the comments

在视图中呈现所有评论,因此您需要将其更改为:

def index
  @post = Post.find(params[:post_id])
  @comments = @post.comments #this will have comments associated with @post
end

<强>更新

您不能拥有两个相同的资源。您需要在路线中使用shallow nesting,因此您的路线将如下所示:

resources :posts do
  resources :comments, only: [:index, :new, :create]
end
resources :comments, only: [:show, :edit, :update, :destroy]