0

我有三个模型:User、FavCategory 和 Category。显然 FavCategory DB 表只不过是一个关联表。

我目前没有将此设置作为 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>

所以我的问题是:

  1. 我应该使用HABTM吗?还是没有必要?
  2. 如果不需要HABTM,我将如何命名复选框以便它们在保存时更新用户的收藏夹?

谢谢!

4

2 回答 2

1

1)我不会在这里使用HABTM,只是因为我的第一个想法是“我打赌在某些时候用户会想要自定义订购他们最喜欢的类别。” 并且一旦他们要求您需要该中间表来添加排名/位置信息。

2)我认为您所掌握的内容是正确的,但是自从我手动创建字段名称以来已经有很长时间了……您为什么不使用form_for @user它,这很好?

于 2012-11-19T02:14:13.507 回答
1

我认为你不应该使用HABTM。您永远不会知道何时需要为 FavCaterogy 添加一些列,如果需要,您无法添加。您应该使用has_many :through关联,它创建一个连接模型,因此您可以在需要时添加更多列。

另外,如果你想做一些统计,例如,如果你想找到:一个喜欢的类别的用户数,如果你有一个加入模型会很容易,只需使用count模型的方法。使用HABTM,您无法做到。

如何创建表格?您可以查看表单助手指南。

于 2012-11-19T05:20:57.890 回答