Ruby on rails 获取未定义的方法'each';对于#<;邮政编码:0xb5d0df30>;在索引视图中

Ruby on rails 获取未定义的方法'each';对于#<;邮政编码:0xb5d0df30>;在索引视图中,ruby-on-rails,ruby,Ruby On Rails,Ruby,在尝试ruby时,我只是问了一个问题,但这里有另一个未定义的方法“each”,我尝试了很多东西 <h1>This is the index page</h1> <p>I need to get the new action running!</p> <%= link_to 'My Blog', controller: 'posts' %> </br> <%= link_to 'New post', new_post_p

在尝试ruby时,我只是问了一个问题,但这里有另一个未定义的方法“each”,我尝试了很多东西

<h1>This is the index page</h1>
<p>I need to get the new action running!</p>
<%= link_to 'My Blog', controller: 'posts' %>
</br>
<%= link_to 'New post', new_post_path %>

<h1>Listing posts</h1>

<table>
  <tr>
    <th>Title</th>
    <th>Text</th>
  </tr>

  <% @posts.each do |post| %>  ///<----ERROR HERE!
    <tr>
      <td><%= posts.title %></td>
      <td><%= posts.description %></td>
      <td><%= link_to 'Show', posts_path(posts) %></td>
      <td><%= link_to 'Edit', edit_posts_path(posts) %></td>
    </tr>
  <% end %>
</table>
这是索引页
我需要开始新的动作


列名职位 标题 正文
/// 在控制器的索引下执行以下操作:

def index
  @posts = Post.all
end
然后在您的视图中,在您的每个do之后,将变量称为
post
,而不是
posts

<% @posts.each do |post| %>
  <tr>
    <td><%= post.title %></td>
    <td><%= post.description %></td>
    <td><%= link_to 'Show', post_path(post) %></td>
    <td><%= link_to 'Edit', edit_post_path(post) %></td>
  </tr>
<% end %>


您的@posts实例变量指向一个新的post记录,而不是post集合。您需要一个数组来迭代,而不是一篇文章。

将控制器中的索引方法修改为以下内容:

def index
  @posts = Post.all
end
#app/controllers/posts_controller.rb
class PostsController < ApplicationController
   def index
      @posts = Post.all
   end
end

Post.new
返回单个(空)对象,
each
方法需要一个
可枚举的
(数组、散列、集合等等),因此会出现错误。

如果要调用
。对象上的每个
,该对象必须由数据集合组成(即使“集合”有一个元素)

您正在调用
Post.new
——意思是
。每个
方法都将返回一个异常,它无法在预期的集合中循环

您需要执行以下操作:

def index
  @posts = Post.all
end
#app/controllers/posts_controller.rb
class PostsController < ApplicationController
   def index
      @posts = Post.all
   end
end
#app/controllers/posts_controller.rb
类PostsController<应用程序控制器
def索引
@posts=Post.all
结束
结束

这将使您的代码正常工作。

我该怎么做?对不起,你在索引中做Post.all还是Post.new?谢谢,这很好用,让我发疯了我知道这很简单,但我找不到,再次谢谢你