使用has_many through association,Rails将数组分配给不同的表列。

时间:2014-01-22 20:53:43

标签: ruby-on-rails ruby-on-rails-4 has-many-through

继续我的情况,我已经通过has_many通过关联建立了两个模型,如here in the rails guides所述。从另一个访问一个通常是通过一个数组完成,但我真的不想要一个数组,我想3个单独的值。

实施例: 我有两个型号,汽车和车库(加上car_garage加入)。我想在每个车库里放3辆车,我也想将这些车分配到我的车库表中的相应列,'garage.everyday_car','garage.weekly_car'和'garage.special_car'。

所以不要像这样收集一个collection_select中的所有3个值

= f.collection_select(:car_ids, Car.all, :id, :name), {}, {multiple: true}

是否可以将阵列分成三个选择框?我可以在数组中指定选择框值占用的位置,例如:

# attempt to assign the monthly car as 3rd in the array every time
= f.collection_select(:car_ids[2], Car.all, :id, :name), {}, {multiple: true}

然后以某种方式将该值连接到我的车库表中的特定列,例如 - garage.monthly_car == car_ids [2]

还是有一种我在这里失踪的方式?基本上我想要3种不同类型的汽车,每辆汽车分配到我车库的一列。

很抱歉,如果解释得不好,我仍然试图直截了当地说,如果您认为代码示例或更多信息可以帮助发表评论,谢谢。我很感激任何帮助。

1 个答案:

答案 0 :(得分:0)

我并不完全理解你想要什么,但如果你想让关系更丰富,你总是可以用模型扩展连接表(我假设你在使用has_many :through时这样做了)。

我所说的是你可以添加一个列:type,只需对每种类型使用三个集合选择,该关系存储在控制器中。

您还可以在Garage模型中为每种类型的汽车创建一个范围,这样您就可以使用Garage.special_car或任何您需要的范围。

这种方法避免了数据的重复(以及随之而来的所有麻烦)。

如有疑问,请发表评论。

GL& HF。