【发布时间】:2016-11-14 23:38:07
【问题描述】:
我正在尝试学习如何在我的 Rails 5 应用程序中使用多态关联。
我已经全部插入 - 感谢这篇文章:https://rubyplus.com/articles/3901-Polymorphic-Association-in-Rails-5
现在,在我的索引视图中,我正在尝试创建基于模型中的属性之一过滤索引的链接。
多态资源称为 package_bips。我的 package_bips 模型有:
belongs_to :ipable, :polymorphic => true, optional: true #, inverse_of: :bip
package_bips 表有一个名为 :status 的属性。
在我的 package/bips/index.html.erb 中,我试图根据状态值(“寻求”或“提供”)建立链接。
我正在尝试这样:
<%= link_to "Offers", polymorphic_path([@ipable, @bips.where(:status => "Offered")]) %>
我还尝试在 bips 控制器的索引操作中创建一行:
@bips_offered = @ipable.bips.where(:status => "Offered")
然后在我的索引中我尝试:
<%= link_to "Offers", polymorphic_path(@bips_offered) %>
我的常规索引操作效果很好(显示所有相关的 bip,包括寻求和提供的)。
<%= link_to "All", action: :index %>
我只想要生成该组子集的链接。
任何人都可以看到如何做到这一点?
下一次尝试
我尝试使用范围来避免必须弄清楚如何为多态索引路径赋予属性。
我知道我的 bip.rb 中有这些范围:
scope :offered, -> { where(status: 'Offered') }
scope :sought, -> { where(status: 'Sought') }
然后在我的 bip 控制器索引操作中,我有:
def index
@bips = @ipable.bips
@offered_bips = @ipable.bips.offered
@sought_bips = @ipable.bips.sought
end
然后在我的views/package/bips/index.html.erb中,我正在尝试:
<%= link_to "Offered", polymorphic_path(@offered_bips) %>
无论我尝试哪种方式,错误消息都会显示:
undefined method `to_model' for #<ActiveRecord::AssociationRelation []>
Did you mean? to_xml
我不明白此错误消息的含义(仅英文)。我认为这意味着它找不到要关联的模型,但这没有任何意义,因为当我使用索引操作的@bips 行时,我得到了正确的结果。
【问题讨论】:
-
@bips.where(:status => "Offered")通常你不能将一组模型传递给一个路由——只能传递一个模型。也许你想传递一组 bip_ids?在这种情况下 - 它不能是路由的一部分,但可以是查询参数(或表单字段) -
我有一个状态表单字段 - 设置为寻求或提供。我试图弄清楚如何在索引页面上制作可以显示 1. 所有状态(寻求和提供)的链接; 2. 仅提供,3. 仅寻求。我可以尝试找到状态设置为提供或寻求的实例的 ID,但这似乎与我尝试这些尝试的方式相同
-
哦,在这种情况下,您不需要传递路线中所有提供的 bips,只需提供您选择的事实即可?这只是意味着您需要将“提供”一词作为参数传递,例如,如果您的正常路线是
organisation_bips_path(@organisation),您将使用organisation_bips_path(@organisation, :status => 'Offered')或类似的方法。我不确定如何将其转换为多态路径,但这就是要开始考虑的问题:)
标签: ruby-on-rails ruby indexing polymorphic-associations