У меня очень раздражающая проблема с самообращающейся belongs_to
ассоциацией в Rails 3:
class Locale < ActiveRecord::Base
belongs_to :parent_locale, :class_name => 'Locale', :foreign_key => 'parent_locale_id'
end
В консоли:
locale = Locale.find(2)
locale.parent_locale = Locale.find(3)
locale.save
#----> Association is saved correctly!
locale.parent_locale_id
=> 3
locale.parent_locale
#----> Association is returned correctly!
# Now let's retrieve the record again, and see if it still works...
locale = Locale.find(2)
locale.parent_locale_id
=> 3
locale.parent_locale
=> nil
Что вземля может быть проблема здесь?Любые предложения?
Редактировать : Это также не работает:
belongs_to :parent_locale, :class_name => 'Locale', :foreign_key => 'parent_locale_id', :inverse_of => :child_locales
has_many :child_locales, :class_name => 'Locale', :foreign_key => 'parent_locale_id', :inverse_of => :parent_locale
Редактировать : Я включил ведение журнала запросов SQL в консоли и заметилчто происходит, когда я пытаюсь получить parent_locale
:
locale.parent_locale
Phrase Load (0.4ms) SELECT `phrases`.* FROM `phrases` WHERE `phrases`.`key` = 'parent_locale_id' LIMIT 1
=> nil
Вау, что это?Оказывается, что Locale
имеет следующий метод:
def [](key)
if phrase = Phrase.find_by_key(key)
t = self.translations.find_by_phrase_id(phrase.id)
t.text if t
end
end
Тем не менее, как мне убедиться, что этот метод не запущен, а вместо этого ассоциация?Честно говоря, я даже не знаю, почему этот метод вызывается, поскольку я нигде не рассматриваю локаль как массив.Также в этом классе есть другие ассоциации, которые делают работают.