我有三个关联的表:A,B,C。以下是关系,
A属于B,B有很多A
B属于C,C有很多B
我想在我的A控制器中获取数据to_json。
我尝试了以下代码
class AController < ApplicationController
def get_data
@a_datas = A.all
events = []
@a_datas.each do |a_data|
events << {:id => a_data.id, :title => "#{a_data.B.try(:b_id)}" , :start => "#{a_data.start_date}",:end => "#{a_data.end_date}" }
end
render :text => events.to_json
end
该代码可以通过
正确输出父母的ID。"#{a_data.B.try(:B_id)}"
虽然我想通过相同的方法获取祖父母的ID(C.id)
"#{a_data.B.C.try(:C_id)}"
我遇到了undefined method `C' for nil:NilClass
错误
如何修改代码以获得祖父母的id值?
非常感谢您!
答案 0 :(得分:0)
您所说的没有道理。您的错误消息undefined method `C' for nil:NilClass
-告诉您a_data.B
为nil,所以我不确定父ID a_data.B.try(:B_id)
可能如何工作?
但是要回答您的问题,每个a_data
都是A
类的实例,并且您尝试在实例上调用父类(B
)时需要的是家长协会。
假设您的关联与您所说的...
class A
belongs_to :b
end
class B
belongs_to :c
end
要访问A
实例的祖父母,您可以
@a_datas.each do |a_data|
events << {:id => a_data.id, :title => "#{a_data.b.try(:c_id)}" , :start => "#{a_data.start_date}",:end => "#{a_data.end_date}" }
end
或者,如果您确信a_data.b
存在,那么可以
@a_datas.each do |a_data|
events << {:id => a_data.id, :title => "#{a_data.b.c.try(:id)}" , :start => "#{a_data.start_date}",:end => "#{a_data.end_date}" }
end