我有三个模型:User,FavCategory和Category。显然,FavCategory数据库表只不过是一个关联表。
我目前没有将此设置作为HABTM关联,因为我只需要向当前用户引用喜欢的类别。
# User.rb
has_many :fav_categories
# FavCategory.rb
belongs_to :user
belongs_to :category
现在我想让用户从复选框中进行选择,并选择他们想要的这些类别作为他们的收藏夹,我目前有这个:
<div class="field">
<%= f.label 'Fav Categories' %>
<ul>
<% Category.all.each do |c| %>
<li>
<%= check_box_tag 'user[fav_category_ids][]', c.id, @user.fav_categories.pluck(:category_id).include?(c.id) %>
<%= c.title %>
</li>
<% end %>
</ul>
<% end %>
</div>
所以我的问题是:
谢谢!
答案 0 :(得分:1)
1)我不会在这里使用HABTM只是因为我的第一个想法是“我在某个时候打赌用户想要自定义他们喜欢的类别。”并且一旦他们要求您需要该中间表来添加排名/位置信息。
2)我认为你所拥有的是正确的,但是自从我手动创建字段名称以来已经很长时间了......为什么你不使用form_for @user
并且这是好事?
答案 1 :(得分:1)
我认为你不应该使用HABTM。您永远不会知道何时需要为FavCaterogy添加一些列,如果需要,您无法添加。您应该使用has_many :through
关联,它会创建一个连接模型,因此您可以根据需要添加更多列。
另外,如果你想做一些统计,例如,如果你想找到:喜欢的类别的用户数,如果你有一个连接模型就会很容易,只需使用count
模型方法。使用HABTM,你无法做到。
如何创建表单?您可以查看form helper的参考指南。