我正在使用jbuilder编写部分内容以返回json数据。我有一个模块,我在其中返回show方法中的每条记录的数据和索引中的所有记录。但所有记录的东西都不起作用 在这里我做了什么 我在控制器中的show方法
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
它表示undefined @ signal.user.first_name。它到达内部部分但不能达到联想。我查了一下日志..但没什么好帮的...... 长期坚持下去......帮助赞赏
答案 0 :(得分: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