2014-01-31 4 views
4

Я пишу партитуры, используя jbuilder для возврата данных json. У меня есть модуль, в котором я возвращаю данные на запись в методе show и все записи в индексе. Но все записи вещь не работает здесь то, что я сделал мое шоу методы в контроллеречастично в Jbuilder не работает с ассоциациями

def index 
@signals = Signal.all.paginate(:page => params[:page], :per_page => 10) 

end 

def show 
@signal = Signal.find(params[:id]) 
end 

Вот мой частичного _signal.json_jbuilder

json.(@signal, :id, :power) 
json.user do 
json.first_name @signal.user.first_name 
json.last_name @signal.user.last_name 
json.email @signal.user.email 
end 
json.location @signal.signal_location, :latitude, :longitude 
json.device do 
json.model @signal.device.phonemodel 
json.os_version @signal.device.os_version 
json.os_type @signal.device.os_type 
json.sim_card_provider @signal.device.sim_card_provider 
end 

Сейчас я использую это частичный в моем show.json .jbuilder и index.json.jbuilder вот мой show.json.jbuilder

json.partial! 'signals/signal', signal: :@signal 

он работает нормально, но когда я использую это частичный в index.json.jbuilder вот мой index.json.jbuilder

json.partial! partial: 'signals/signal', collection: @signals, as: :signal 

это говорит неопределенный @ signal.user.first_name. Он достигает частичного части, но не может достичь ассоциаций. Я проверил журналы ... но ничего очень полезного ... застрял с ним с давних пор ... помогло оценить

ответ

10

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

Например

json.(signal, :id, :power) 
json.user do 
    json.first_name signal.user.first_name 
    json.last_name signal.user.last_name 
    json.email signal.user.email 
end 
json.location signal.signal_location, :latitude, :longitude 

И show.json.jbuilder

json.partial! 'signals/signal', signal: @signal 

в index.json.jbuilder

json.partial! partial: 'signals/signal', collection: @signals, as: :signal 
Смежные вопросы