好。所以我有三个模型,a,b和c。一个has_one c,b has_many cs,c属于a和b。当我用b的方法引用“cs”时,它很好。但是当我在a的方法中引用“c”时,它找不到引用;它说“c”是一个'未定义的局部变量或方法'。我知道已经创建了c对象,因为它们出现在MySQL数据库中,我可以很好地从b模型中访问它们,但是我无法从模型中访问它们。
答案 0 :(得分:1)
您的问题来自您对关系的说明。
看来你正在寻找这些方面的东西
class a < ActiveRecord::Base
has_one :c, :through=>:b
end
class b < ActiveRecord::Base
has_many :c
end
class a < ActiveRecord::Base
belongs_to :b
end
这应该允许您正确运行查询。希望这会有所帮助。
答案 1 :(得分:0)
A类&lt;的ActiveRecord :: Base的 has_one:c,:dependent =&gt; :破坏
B级&lt;的ActiveRecord :: Base的 has_many:c
C类&lt;的ActiveRecord :: Base的 belongs_to:a belongs_to:b
在as_controller中创建方法:
def创建 @a = a.new(params [:a]) params [:b] [:venue_id] = get_venue_id_for_b除非params [:venue] [:name] .blank? @ a.user = @user @ a.b = B.new(params [:b]) @b = @ a.b. @ b.valid? @ a.valid?
respond_to do |format|
if @a.valid? and @b.valid?
if (@a.duplicate? or @a.save) and @b.save
flash[:notice] = 'a was successfully created.'
format.html { redirect_to a_url(@a) }
format.xml { head :created, :location => a_url(@a) }
else
format.html { render :action => "new" }
format.xml { render :xml => @a.errors.to_xml and @b.errors.to_xml }
end
else
format.html { render :action => "new" }
format.xml { render :xml => @a.errors.to_xml and @b.errors.to_xml }
end
end
端
模型B中的此方法有效:
def q 把cs.class 端
模型A中的此方法不起作用:
def q 把c.class 端