railsで
userある決まった商品のなかからどの商品を扱うかを決めて、その商品に値段をつけるとします。
モデルは
userモデル・user_product_categoryモデル・product_categoryモデル
という3つのモデルが有り、user_product_categoryモデルはpriceというカラムを持っています。
そしてuser_product_categoryコントローラのcreateではproduct_categoryモデルの一覧があり、そこにチェックボックスをつけて値段を入れるとユーザープロフィールページに表示されるようにしたいです。
条件としては
1・どの商品を取り扱うか、取り扱わないかをユーザープロフィール編集ページではない1ページで更新したい。(中間テーブルのみを一括更新したい。)
2・値段もそのページで変更可能にしたい。
この時どのようにformを作ったりコントローラを書けばよいでしょうか。
調べて、
<% ProductCategory.all.each do |product_category| %> <%= check_box_tag "user[product_category_ids][]", product_category.ids, f.object.product_categories.include?(product_category) %>
とやることでチェックボックスがついたものだけparamsに入れられるのはわかってきたのですが、これだと複数一括で登録する場合バリデーションが一括出できない気がして・・・
また、ユーザーモデルとひも付けて
def user_params params.require(:user).permit(:name,{product_category: [] }) end
でユーザーごとsaveすればいいとも書いてあったのですが、これだとpriceカラムをどのように入れればいいのかわからないというのがありまして・・・
何解決策はないか教えて下さい。お願いします。
追記
Userモデルははusernameカラムを持ち
has_many :user_product_category has_many :product_category through: :user_product_category
user_product_categoryは
belongs_to :users belongs_to :product_category
でカラムとしては
user_id, :integer product_category_id, :integer price, :integer
product_categoryはnameカラムをもっていて
has_many :user_product_category has_many :users through: :user_product_category
を持っている状態です
createメソッドについてやりたいことは
1・まず、ProductCategories.allで手に入る全製品カテゴリ名をチェックボックスで表示
2・checkboxの横に数字を入れるテキストフィールドがありpriceを入力する
3・更新を押すとuser_product_categoryコントローラにparamsが飛んで
checkboxがついてる製品カテゴリの中間テーブルを生成。
checkboxがあったが外れたものについては削除。
さらにpriceフィールドのバリデーションをする
例えば
user_id=1のユーザーAがおり
製品カテゴリ1(id=1)
製品カテゴリ2(id=2)
製品カテゴリ3(id=3)
があるとして
ユーザーAは最初に製品カテゴリ1にチェックし、1000円と入力する
↓
user_product_categoryテーブルで
id=1
user_id=1
product_categories_id=1
price=1000
というレコードが生成される
次にユーザーAは製品カテゴリ1のチェックを外し、製品カテゴリ2と製品カテゴリ3のチェックを付け、両方共にprice=1200を入力し更新ボタンを押す
↓
user_product_categoryテーブルで
id=1のレコードはチェックが外れたので削除
id=2
user_id=1
product_categories_id=2
price=1200
id=3
user_id=1
product_categories_id=3
price=1200
というレコードが生成される
こんな感じにしたいです。
ただこの時strong parameterはどのように書くのかとかどうやって一括でpriceフィールドのバリデーションするかとか全く思いつきませんでした。
いい方法があったら教えて頂きたいです。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。