ActiveRecord `has_one` 关联扩展方法
Posted
技术标签:
【中文标题】ActiveRecord `has_one` 关联扩展方法【英文标题】:ActiveRecord `has_one` association extension method 【发布时间】:2016-09-30 09:23:54 【问题描述】:我尝试用方法扩展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
一起使用?
【问题讨论】:
【参考方案1】:通过访问has_many
关联,您会收到SubscriptionPlan::ActiveRecord_Associations_CollectionProxy
,但使用has_one
,您只会收到SubscriptionPlan
实例本身。
所以这里没有什么可以扩展的。
如果您愿意提供有关您的模型的更多信息,我会帮助您提供准确的代码。
【讨论】:
非常感谢! ActiveRecord 文档guides.rubyonrails.org/… 有点令人困惑:Extensions can refer to the internals of the association proxy using these three attributes of the proxy_association accessor: ... proxy_association.target returns the associated object for belongs_to or has_one, or the collection of associated objects for has_many or has_and_belongs_to_many.
。文档中提到has_one
是否有错误?
我不认为这是一个错误,但现在我不能评论它=)以上是关于ActiveRecord `has_one` 关联扩展方法的主要内容,如果未能解决你的问题,请参考以下文章