0

User、FavCategory、Categoryの3つのモデルがあります。明らかに、FavCategoryDBテーブルは関連テーブルにすぎません。

現在のユーザーでお気に入りのカテゴリを参照するだけでよいため、現在、この設定を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 に答える