2016-09-30 4 views
0

Я пытался расширить has_one ассоциацию с методом:ActiveRecord `has_one` ассоциации метод расширения

has_one :subscription_plan, -> { where current: true } do 
    def in newspaper 
    where newspaper: newspaper 
    end 
end 

и получил ошибку undefined method 'in' for #<SubscriptionPlan...>

Но он работает с has_many:

has_many :subscription_plans, -> { where current: true } do 
    def in newspaper 
    where(newspaper: newspaper).take 
    end 
end 

Как это сделать с has_one на Rails 4.2.1?

ответ

0

Обращаясь к has_many ассоциациям, вы получаете SubscriptionPlan::ActiveRecord_Associations_CollectionProxy, но с has_one вы просто получаете SubscriptionPlan экземпляр сам.

Таким образом, здесь нет ничего, что можно было бы расширить.

Если вы предоставите более подробную информацию о своих моделях, я поможем вам с точным кодом.

+0

thanx много! ActiveRecord docs http://guides.rubyonrails.org/association_basics.html#association-extensions немного запутывают: 'Расширения могут ссылаться на внутренности прокси-сервера ассоциации, используя эти три атрибута accessor_association: proxy_association. target возвращает связанный объект для belongs_to или has_one или коллекцию связанных объектов для has_many или has_and_belongs_to_many.'. Ошибочно ли в документах упоминание 'has_one'? – yurko

+0

Я не думаю, что это ошибка, но прямо сейчас я не могу прокомментировать ее =) – Aleksey

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