【问题标题】:undefined method each rails error未定义的方法每个导轨错误
【发布时间】:2013-01-31 14:57:10
【问题描述】:

我正在通过位于http://ruby.railstutorial.org 的教程试用 ruby​​ on rails。 我已经到了可以创建用户并将他们的姓名和头像显示在以下位置的地步:

http://localhost:3000/users/1

现在我想在用户访问时显示所有用户:

http://localhost:3000/users/

这是我的控制器:

class UsersController < ApplicationController

  def index
    @user = User.all
  end      

  #...
end

这是我的看法。

#View for index action in user's controleer

<h1>All users</h1>

<ul class="users">
  <% @users.each do |user| %>
    <li><%= user.content %></li>
  <% end %>
</ul>

我收到以下错误。

undefined method `each' for nil:NilClass

谁能告诉我为什么索引页没有按我想要的那样工作。

【问题讨论】:

  • 在控制器的索引操作中将变量 @user 重命名为 @users ;)
  • @MrYoshiji 是的,@user 未设置,实例变量在您尝试访问它们时采用默认值nil,因此@usersnil,但设置了@user

标签: ruby-on-rails ruby ruby-on-rails-3.1 ruby-on-rails-3.2


【解决方案1】:

问题来自不存在的@users变量:

在您的索引操作中,您将@user 设置为所有用户:

def index
  @user = User.all
end

按照惯例,当我们从数据库中检索多个条目时,我们使用复数名称,这就是您在视图中调用@users(注意“s”)的原因。只需将您的 @user 重命名为 @users 即可;)

def index
  @users = User.all
end

【讨论】:

  • 好的——它可能有效,但你能解释一下原因吗——我的意思是它是一个变量。对 ?而且我不知道一种严格限制变量名的语言 - 那么为什么在 Rails 中
  • @ImranNaqvi Rails 不限制您使用特定的复数名称,但相应地命名您的变量是一种约定:@users 是描述几个User 列表的最佳变量名称记录。
  • 好的,这是我的问题,即如果 rails 没有限制我,这只是一个约定,那么为什么它会给出 error -undefined 方法每个
  • 因为您没有在视图中使用完全相同的变量名称。如果您在控制器的操作中定义@whatever = User.all,则必须在视图中使用变量@whatever
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
相关资源
最近更新 更多