1

我从 Ruby 开始,在我的视图中显示信息时遇到了一些问题。

这是我的代码:e app/models/user.rb

class User < ActiveRecord::Base

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me, :encrypted_password, :meta_attributes

  has_one :meta
  accepts_nested_attributes_for :meta
end

*app/controllers/users_controllers.rb*

  def index
    @users = User.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @users }
    end
  end

应用程序/视图/用户/index.html.rb

<% @users.each do |user| %>
      <td><%= user.email %></td>
      <td><%= user.meta.last_name %></td>
    <tr>
      <td><%= link_to 'Show', user %></td>
      <td><%= link_to 'Edit', edit_user_path(user) %></td>
      <td><%= link_to 'Destroy', user, method: :delete, data: { confirm: 'Are you sure?' } %></td>
    </tr>
  <% end %>

你有没有预料到,它会返回一些错误:

undefined method `last_name' for nil:NilClass

你有什么线索吗?

4

2 回答 2

1

错误来自您使用的行

user.meta.last_name

这意味着user.metanil

如果您确定meta在创建每个用户时为每个用户添加了一个,则问题可能来自meta不在您的attr_accessible列表中的事实。

如果您并不总是meta为每个用户创建一个并且您不介意有一个空的meta,您可以向您的User模型添加一个回调:

before_create :add_meta

def add_meta
    if self.meta.nil?
        self.meta = Meta.create( put_your_default_attributes_here )
    end
end
于 2013-03-06T13:22:40.107 回答
0

我很确定您已经解决了这个问题,但是我在这里遇到了同样的问题,并且解决了将“nil”方法放入条件中的问题。也许可以帮助有同样问题的人。

<td>
  <% if user.meta %>
    <%= user.meta.last_name %>
  <% end %>
</td>
于 2016-02-07T01:01:30.793 回答