2013-08-07 4 views
0

У меня есть 3 модели: Пользователь, Местоположение, Картинка. A Местоположение имеет несколько изображений, и Пользователь может предоставить несколько изображений. Я использую rabl для рендеринга результата моего запроса в json. Моя проблема в том, что я не знаю, как отображать имя пользователя из идентификатора пользователя в этом отношении?Доступ к атрибутам другой модели

Я разработал свои модели, как, что:

Изображение:

class Picture < ActiveRecord::Base 
... 
    belongs_to :location 
    belongs_to :user 
... 
end 

Пользователь:

class User < ActiveRecord::Base 
... 
    has_many :pictures 

    accepts_nested_attributes_for :pictures 

    attr_accessible :name, :email 
... 
end 

Расположение:

class Location < ActiveRecord::Base 
... 
    has_many :pictures, :dependent => :destroy 

    accepts_nested_attributes_for :pictures 

    attr_accessible :name, :address 
...  
end 

Мой Рабль файл:

object false 
collection @locations 

attributes :id, :name, :address 

child :pictures do 
    attributes :id, :location_id, :url, :user_id, :created_at 
end 

Я попытался добавить: имя_пользователя в блоке child: pictures, но, очевидно, он терпит неудачу ... Как я могу получить к нему доступ?

EDIT: Когда я добавляю

node(:user_name) { |picture| picture.user.name } 

как упомянуто Джесси, я получаю эту ошибку в логах:

2013-08-08T00:20:18.911561+00:00 app[web.1]: 
2013-08-08T00:20:18.911561+00:00 app[web.1]: ActionView::Template::Error (undefined method `name' for nil:NilClass): 
2013-08-08T00:20:18.911561+00:00 app[web.1]:  1: object false 
2013-08-08T00:20:18.911561+00:00 app[web.1]:  2: collection @locations 
2013-08-08T00:20:18.911561+00:00 app[web.1]:  3: 
2013-08-08T00:20:18.911561+00:00 app[web.1]:  4: attributes :id, :name, :address, :city, :state, :zipcode, :country_name, :latitude, :longitude, :distance 
2013-08-08T00:20:18.911561+00:00 app[web.1]:  5: 
2013-08-08T00:20:18.911561+00:00 app[web.1]: app/views/api/v1/locations/index.json.rabl:2:in `_app_views_api_v__locations_index_json_rabl___4323955523361468965_70365132977020' 

Спасибо!

ответ

2

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

collection @locations 

attributes :id, :name, :address 

child :pictures do 
    attributes :id, :location_id, :url, :user_id, :created_at 
    node(:user_name) {|picture| picture.user.name} 
end 
+0

Спасибо Jesse, однако, когда я добавляю эту строку, я получаю некоторые странные ошибки в журналах, см. Мой вопрос, отредактированный. Благодаря! – jbihan

+0

Извините, это была моя ошибка, у моих фотографий не было пользователей, поэтому имя указывало на нулевой объект ... Большое спасибо за ваш ответ, он отлично работает! – jbihan

Смежные вопросы