我从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
你有任何线索吗?
答案 0 :(得分:1)
错误来自您使用
的行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
答案 1 :(得分:0)
我很确定你已经解决了这个问题,但我在这里遇到了同样的问题,并且解决了这个问题。条件内的方法。也许可以帮助有同样问题的人。
app/scripts/