ссылка на принадлежность к ассоциации принадлежащей к ассоциации - PullRequest
1 голос
/ 04 декабря 2010

У меня есть следующие отношения, которые работают в консоли 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>):

Ответы [ 3 ]

3 голосов
/ 04 декабря 2010

Вместо определения метода для этого delegate! В app/models/c.rb:

delegate :title, :to => :b

А потом в app/models/b.rb:

delegate :title, :to => :a
0 голосов
/ 06 декабря 2010

Мне пришлось превратить метод заголовка класса B в метод класса, чтобы заставить его работать.

0 голосов
/ 04 декабря 2010

has_one (association_id, options = {}) Определяет связь один-к-одному с другим классом. Этот метод должен использоваться только если другой класс содержит внешний ключ. Если текущий класс содержит иностранный ключ, то вы должны использовать принадлежать вместо. Смотрите также ActiveRecord :: Ассоциация :: методы класса игровых обзор того, когда использовать has_one и когда использовать принадлежат.

...