在Jbuilder中部分不与协会合作

JNI*_*oad 4 json ruby-on-rails partial-views jbuilder

我正在使用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
Run Code Online (Sandbox Code Playgroud)

这是我的部分_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
Run Code Online (Sandbox Code Playgroud)

现在我在我的show.json.jbuilder和index.json.jbuilder中使用这个部分,这是我的show.json.jbuilder

json.partial! 'signals/signal', signal: :@signal 
Run Code Online (Sandbox Code Playgroud)

它工作正常,但当我在index.json.jbuilder中使用这个部分时,这是我的index.json.jbuilder

json.partial! partial: 'signals/signal', collection: @signals, as: :signal
Run Code Online (Sandbox Code Playgroud)

它说undefined @ signal.user.first_name.它到达内部部分但不能达到联想.我检查了日志..但没有什么非常有帮助...坚持了很长时间...帮助赞赏

laz*_*wei 10

您应该更改partial以使用局部变量.

例如

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
Run Code Online (Sandbox Code Playgroud)

并在 show.json.jbuilder

json.partial! 'signals/signal', signal: @signal
Run Code Online (Sandbox Code Playgroud)

index.json.jbuilder

json.partial! partial: 'signals/signal', collection: @signals, as: :signal
Run Code Online (Sandbox Code Playgroud)