我有以下在Rails控制台中使用的关系,但是当我运行网站时,我做错了什么?

class C < ActiveRecord::Base
  belongs_to :b
end

class B < ActiveRecord::Base
  belongs_to :a
  has_many :c

  def title
    a.title
  end
end

表C有B和B的外键,B和B有一个外键。

这在铁轨控制台中起作用。

c = C.find(12)
c.b.title

但是当我运行网站时,它不起作用。

这是我收到的错误

NoMethodError (undefined method `title' for #<ActiveRecord::Associations::BelongsToAssociation:0x104feb5a0>):
有帮助吗?

解决方案 3

我必须将B类标题方法变成类方法以使其工作。

其他提示

而不是定义这样做的方法,而是 delegate呢在 app/models/c.rb:

delegate :title, :to => :b

然后进 app/models/b.rb:

delegate :title, :to => :a

has_one(Assioce_id,options = {})指定与另一类的一对一关联。仅当其他类包含外键时,才应使用此方法。如果当前类包含外键,则应使用ander_to代替。另请参见ActivereCord :: coopsiations :: ClassMethods关于何时使用has_one和何时使用的概述。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top