как получить значения дочернего объекта - PullRequest
0 голосов
/ 17 февраля 2011

У меня есть несколько вложенных объектов в рельсах.Пользователь -> has_many: задачи -> has_one: местоположение.

Вчера я думал, что у меня проблемы с привязкой значений местоположения к задаче, но теперь я понимаю, что не могу получить значения для вывода в шоу.

Я могу получить вывод через отладку

<%= for task in @user.tasks %>
        <%= debug task.locations %>
<% end %>

output

--- !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

какие-либо предложения о том, что я ошибся?

---------- обновление, включая модели ---------------- Мои модели для задач и локаций:

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 Ответ

2 голосов
/ 17 февраля 2011

Если задача has_one location, вам нужно сделать task.location.address без s в конце местоположения, так как has_one возвращает реальный объект, а не коллекцию. Вы также должны быть уверены, что ваше местоположение существует, прежде чем вызывать его адресный метод, иначе вы получите ошибку в случае нулевого местоположения. Вас может заинтересовать метод try, например task.location.try(:address).

...