如何在我的视图中显示嵌套属性的值?
问题描述:
我以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
你有什么线索?
答
误差来自哪里使用
user.meta.last_name
这意味着user.meta
是nil
行。
如果你确信你添加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
答
我敢肯定你已经解决了这个问题,但我在这里遇到了同样的问题,并解决了将'nil'方法放在条件内的问题。也许可以帮助有同样问题的人。
<td>
<% if user.meta %>
<%= user.meta.last_name %>
<% end %>
</td>
'meta'是我的'attr_accessible list' :)所有用户都将拥有元,但有些领域应该是空的。是否有一个更简洁的方法来检查字段是否为空' – Xavier 2013-03-06 13:34:14
@ x4vier您必须检查每个字段,例如您的last_name错误,您可以用'user替换它。 meta.last_name if!user.meta.nil?'或类似的东西 – alestanis 2013-03-06 15:46:08
@ x4vier如果所有用户都有一个非零元,你不应该有错误,你发布 – alestanis 2013-03-06 15:47:11