如何获取子对象的值

时间:2011-02-16 21:50:39

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

我在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 

1 个答案:

答案 0 :(得分:2)

如果位置has_one位置,则您需要在位置末尾没有task.location.address的情况下执行s,因为has_one会返回实际对象而不是集合。在调用它的地址方法之前,您还需要确定您的位置是否存在,否则如果位置为零,您将收到错误。您可能对try方法感兴趣,例如task.location.try(:address)