当我偶然发现问题时,我正在开发一个自行车网站。
我有以下模型(为简化说明,我不考虑一些模型和属性):
model_name
:some attributes
(示例) bike
:name
,price
,color
(国歌,3999,黑色)category
:name
(刹车,变速或变速箱等)component
:name
(Shimano SLX或Shimano XT或Shimano XTR-在这种情况下,是变速箱类别的组件)因此,这些模型之间的关系如下:
bike
有很多components
component
上有bikes
component
属于category
category
有很多components
现在,我已经创建了这3个表并建立了关联:category
has_many components
和component
属于category
。一切正常。现在,我必须在bike
和component
之间创建一个joinable并使用具有通过关联的许多功能。但是对我来说,问题是要了解之后的下一步,因为我不知道只需一个下拉菜单即可选择所有组件。我想选择按类别划分的组件。像这样:
我该如何实现?希望您能够帮助我。谢谢!
答案 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%肯定它可以通过很多次,但是我个人不会使用它通过许多次,“拥有并属于许多人”似乎恰好满足您的需求,并且需要的配置更少。