在不同字段上拆分同一关联的选择

时间:2019-05-31 12:45:58

标签: ruby-on-rails ruby-on-rails-5

当我偶然发现问题时,我正在开发一个自行车网站。

我有以下模型(为简化说明,我不考虑一些模型和属性):

  • model_namesome attributes(示例)
  • bikenamepricecolor(国歌,3999,黑色)
  • categoryname(刹车,变速或变速箱等)
  • componentname(Shimano SLX或Shimano XT或Shimano XTR-在这种情况下,是变速箱类别的组件)

因此,这些模型之间的关系如下:

  • 一个bike有很多components
  • component上有bikes
  • component属于category
  • 一个category有很多components

现在,我已经创建了这3个表并建立了关联:category has_many componentscomponent属于category。一切正常。现在,我必须在bikecomponent之间创建一个joinable并使用具有通过关联的许多功能。但是对我来说,问题是要了解之后的下一步,因为我不知道只需一个下拉菜单即可选择所有组件。我想选择按类别划分的组件。像这样:

enter image description here

我该如何实现?希望您能够帮助我。谢谢!

1 个答案:

答案 0 :(得分:1)

棘手的部分是您要在不同字段上拆分同一关联的选择。您可能需要手动处理字段名称,如下所示:

= select_tag 'bike[component_ids][]', options_from_collection_for_select(frames_category.components.all, :id, :name)
= select_tag 'bike[component_ids][]', options_from_collection_for_select(breakes_category.components.all, :id, :name)
= select_tag 'bike[component_ids][]', options_from_collection_for_select(transmissions_category.components.all, :id, :name)
= select_tag 'bike[component_ids][]', options_from_collection_for_select(tyres_category.components.all, :id, :name)

注意属性“ bike [components_ids] []”的名称。控制器上的params哈希看起来像:

params == {bike: {name: 'some name', price: '200', component_ids: [1,3,6,8]}

ActiveRecord应该使用collection_singular_ids= https://guides.rubyonrails.org/association_basics.html#methods-added-by-has-many-collection-singular-ids-ids

处理组件的分配

我不是100%肯定它可以通过很多次,但是我个人不会使用它通过许多次,“拥有并属于许多人”似乎恰好满足您的需求,并且需要的配置更少。