我在rails中有一些嵌套对象。用户 - > has_many:tasks - > has_one:location。
昨天,我以为我无法将位置值链接到任务,但现在我意识到我无法获得显示输出值。
我可以通过debug
获取输出<%= for task in @user.tasks %> <%= debug task.locations %> <% end %>
输出
--- !ruby/object:Location attributes: id: "1" address: "testing address" city: "chicago" attributes_cache: {} changed_attributes: {} etc. etc. etc.
所以我想如果我用过
<%= task.locations.address %>
Rails会给我一个地址字段。但我得到了一个
undefined method 'address' for nil:NilClass
关于我出错的任何建议?
----------更新,包括模型---------------- 我的任务模型&amp;地点是
class Task < ActiveRecord::Base attr_accessible :user_id, :date, :description, :location_id belongs_to :user has_one :location end class Location < ActiveRecord::Base attr_accessible :address, :city, :state, :zip has_many :tasks end
答案 0 :(得分:2)
如果位置has_one
位置,则您需要在位置末尾没有task.location.address
的情况下执行s
,因为has_one
会返回实际对象而不是集合。在调用它的地址方法之前,您还需要确定您的位置是否存在,否则如果位置为零,您将收到错误。您可能对try方法感兴趣,例如task.location.try(:address)
。