2013-06-06 2 views
1

У меня есть две модели: Foo::Bar и Bar. Foo::Bar принадлежит_от Bar. Проблема возникает при попытке вызвать @bar.bar (@bar в этом случае является экземпляром Foo::Bar).принадлежит_to class_name проблемы с пространством имен

Если определить :class_name, используя кавычки, тогда все работает, как ожидалось, но если вы сделать не использовать кавычки, то вы получите обратно Foo::Bar экземпляр вместо более Bar экземпляра.

Почему разница? Это ошибка в Rails (кстати, я использую Rails 4.0.0RC1)?

не работает

class Foo::Bar < ActiveRecord::Base 
    belongs_to :bar, 
    class_name: ::Bar 
end 

Работы

class Foo::Bar < ActiveRecord::Base 
    belongs_to :bar, 
    class_name: '::Bar' 
end 

ответ

1

Хорошо. Думаю, я понимаю.

Bar.to_s -> "Bar" 
::Bar.to_s -> "Bar" 

Так что я думаю, что рельсы делают to_s где-то, что преобразует ваш :: Bar в Bar. Так что лучше использовать строку для class_name, чтобы избежать сюрпризов.

+0

Я думаю, вы абсолютно правы. благодаря –

1

Почему вы ожидаете ::Bar работать?

Когда я смотрю в documentation, я вижу, что :class_name s - это строки во всем мире. Я не вижу никакого использования чего-то вроде ::Bar.

+0

Я использовал его в своем приложении в нескольких других местах без проблем до этой проблемы. –

+0

Вы уверены, что это сработало в случаях, когда имя ассоциации отличается от имени класса? – usha

+0

Да. Я позитивный. У меня есть 'has_many: current_jobs', где': class_name' is 'Job', и он работает без проблем. –

Смежные вопросы