2016-09-30 101 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 

如何使它適用於Rails 4.2.1上的has_one

回答

0

通過訪問has_many協會您收到SubscriptionPlan::ActiveRecord_Associations_CollectionProxy,但與has_one您只需收到SubscriptionPlan實例本身。

所以這裏沒有什麼可以擴展的。

如果您想提供更多關於您的模型的信息,我會幫您準確的代碼。

+0

thanx很多! ActiveRecord文檔http://guides.rubyonrails.org/association_basics.html#association-extensions有點令人困惑:'擴展可以使用proxy_association訪問器的這三個屬性來引用關聯代理的內部:... proxy_association。 target返回belongs_to或has_one的關聯對象,或has_many或has_and_belongs_to_many.'的關聯對象的集合。文檔中提到'has_one'是否是錯誤的? – yurko

+0

我不認爲這是一個錯誤,但現在我不能評論它=) – Aleksey