Post#index中的NoMethodError未定义方法`每个&#39;对于#<post:0x9c01d58>

时间:2017-12-25 14:59:06

标签: ruby-on-rails ruby

我是Rails的初学者。我想显示特定主题下的帖子列表。 这是我的控制者:

      def index
        @posts = Post.find(params[:topic_id])
      end

这是我的观点:

     <% @posts.each do |p| %>
        <tr>
          <td> <%= p.user_id %> </td>
          <td> <%= p.title %> </td>
          <td> <%= p.content %> </td>
          <td> <i> <%= p.created_at %> </i> </td>
          <td> <%= link_to 'Show Post', post_path(p) %> </td>
          <td> <%= link_to 'Delete Post', post_path(p), method: :delete %> </td>
          <td> <%= link_to 'Update Post', edit_post_path(p) %> </td>
        </tr>
      <% end %>

我收到的错误是NoMethodError in Post#index (undefined method 'each' for #<Post:0x9c01d58>)。我不知道错误是什么。你能解释一下错误的位置吗?

2 个答案:

答案 0 :(得分:1)

  

我不知道错误是什么

Post.find会返回一个帖子。当然,它不会回复each,因为它只是一个帖子,而不是帖子的集合。

你可能想要的是:

@posts = Post.where(topic_id: params[:topic_id])

但很难说。

答案 1 :(得分:1)

Post.find(params[:topic_id])检索Post模型的一个实例,而不是数组。

@posts = Post.all检索所有帖子

@posts = Post.where(topic_id: params[:topic_id])检索主题

的所有帖子

@posts = Post.where(user_id: params[:user_id])检索所有用户的帖子