如何在我的视图中显示嵌套属性的值?

时间:2013-03-06 13:19:54

标签: ruby-on-rails ruby nested-attributes

我从Ruby开始,我有一些问题要在我的观点中显示信息。

这是我的代码: Ë 应用程序/模型/ 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

*应用程序/控制器/ 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

你有任何线索吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我很确定你已经解决了这个问题,但我在这里遇到了同样的问题,并且解决了这个问题。条件内的方法。也许可以帮助有同样问题的人。

app/scripts/