1

我有以下关系在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 有 A 的外键。

这适用于 rails 控制台。

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

但是当我运行该站点时它不起作用。

这是我得到的错误

NoMethodError (undefined method `title' for #<ActiveRecord::Associations::BelongsToAssociation:0x104feb5a0>):
4

3 回答 3

3

而不是定义一个方法来做到这一点,delegate!在app/models/c.rb

delegate :title, :to => :b

然后在app/models/b.rb

delegate :title, :to => :a
于 2010-12-03T22:40:53.187 回答
0

has_one(association_id, options = {}) 指定与另一个类的一对一关联。仅当其他类包含外键时才应使用此方法。如果当前类包含外键,那么您应该改用belongs_to。另请参阅 ActiveRecord::Associations::ClassMethods 关于何时使用 has_one 和何时使用 belongs_to 的概述。

于 2010-12-03T21:20:59.447 回答
-1

我必须将 B 类标题方法转换为类方法才能使其工作。

于 2010-12-06T17:06:15.840 回答