【问题标题】:Rails - polymorphic paths - indexingRails - 多态路径 - 索引
【发布时间】: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 =&gt; "Offered") 通常你不能将一组模型传递给一个路由——只能传递一个模型。也许你想传递一组 bip_ids?在这种情况下 - 它不能是路由的一部分,但可以是查询参数(或表单字段)
  • 我有一个状态表单字段 - 设置为寻求或提供。我试图弄清楚如何在索引页面上制作可以显示 1. 所有状态(寻求和提供)的链接; 2. 仅提供,3. 仅寻求。我可以尝试找到状态设置为提供或寻求的实例的 ID,但这似乎与我尝试这些尝试的方式相同
  • 哦,在这种情况下,您不需要传递路线中所有提供的 bips,只需提供您选择的事实即可?这只是意味着您需要将“提供”一词作为参数传递,例如,如果您的正常路线是organisation_bips_path(@organisation),您将使用organisation_bips_path(@organisation, :status =&gt; 'Offered') 或类似的方法。我不确定如何将其转换为多态路径,但这就是要开始考虑的问题:)

标签: ruby-on-rails ruby indexing polymorphic-associations


【解决方案1】:

polymorphic_path() 方法还接受 Model 类名称,请参阅:https://api.rubyonrails.org/classes/ActionDispatch/Routing/PolymorphicRoutes.html

多态路径([@ipable,PackageBips])

应该转换为 iptable_bips_path(@iptable)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多