多対多のモデル関係で下記のようにあったときに
item <=> list
item <=> category
ruby
1item {id:1, name: "財布"} 2 3list {id:1, name: "ブランド"} 4 5category {id:1, name: "ファッション"}
item_lists
ruby
1 item_id : 1 list_id: 1
などのデータがある中で新規listを登録する際に
ruby
1item {id:2, name: "安い財布"} 2 3list {id:2, name: "セール"} 4 5category {id:1, name: "ファッション"}
カテゴリーを登録することなく
カテゴリーの中間テーブルだけを更新するのに
controller
1@item = params.require(:item).inject(0){|i,item| @user.items.build(name: dict.permit(Dict::NESTED_ALLOWED_PARAMS)[:text])} 2 //存在確認 3 if params.require(:category).present? 4 //modelに存在していないかチェック。すでに重複する内容があれば中間テーブルを更新 5 if params.require(:category).inject(0){ |i,c| Category.where(name: c[:name]).ids}.present? 6 cate = @item.item_categoryies.build 7 params.require(:category).inject(0){|i,c| cate.category = Category.where(name: c[:name])[0]} 8 else 9 params.require(:category).inject(0){|i,cate| @item.categories.build(name: cate.permit(Category::NESTED_ALLOWED_PARAMS)[:name])} 10 end 11 end
あまりにも汚いコードなのでこれをどう書くときれいに処理できるのでしょうか?
よろしくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/14 04:49