2016-09-27 13 views
0

こんにちは私はネストされた属性を使用して機能を実装しようとしています。ハンディキャップを作成するためのフォーム(Customer用)では、すべての顧客のリーグのリストを表示したいと思います。フォームがCreateアクションでサブミットされたら、@ handicap.saveを使用すると、ハンディキャップおよびリーグ(フォームで選択されたリーグ)も含まれます。多くの人から多くの人へのネストされた属性のファイル

唯一の解決策はネストされた属性を使用しないことでした。 新しい方法では、私は顧客からすべての障害を受け取り、フォームに表示します。ですからフォームがcreateアクションでsubmitされたら、私は検証を行います。顧客の@handicapレコードを作成し、 を手作業で作成します。

#New/Create actions in the handicaps controller 

def new 
    @leagues = @customer.leagues 
end 

def create 
    handicap = @customer.handicaps.build(handicap_params) 
    if handicap.save 
    associations = [] 
    params[:league_ids].each do |id| 
     associations << LeagueHandicap.new(handicap_id: @handicap.id, league_id: id) 
    end 
    LeagueHandicap.import(associations) 
    end 
end 

私はhandicap.saveを実行し、自動的にリーグハンディキャップの関連付けを作成したいと思います。しかし、私はネストされた属性でそれを行う方法に手掛かりがありません。このようにすることはできますか?

私は、次のモデルがあります:

class Customer < ActiveRecord::Base 
    has_many :handicaps, dependent: :destroy 
    has_many :leagues, dependent: :destroy 
end 

class Handicap < ActiveRecord::Base 
    belongs_to :customer 
    has_many :league_handicaps 
    has_many :leagues, through: :league_handicaps, dependent: :destroy 
end 

class LeagueHandicap < ActiveRecord::Base 
    belongs_to :handicap 
    belongs_to :league 
end 

class League < ActiveRecord::Base 
    has_many :league_handicaps 
    has_many :handicaps, through: :league_handicaps, dependent: :destroy 
end 

(LeagueHandicap通じハンディキャップとリーグ間の多くの関係に多くの)

答えて

0

あなたはleague_idsレールがあなたのためにそれらを追加する必要があります許可する場合。あなたはそれが配列だけどレールに伝える必要があります

def handicap_params 
    params.require(:handicap).permit(league_ids: []) 
end 
+0

そして、どのようにして顧客の@リグをフォームに表示できますか?フォームが提出者の場合は、{handicap:{info_about handicap:{}、league_ids:[1、2、3]}}のようなものになります。私は、リーグをココアに正しく表示することは難しいと思う。私は以下のようなsumthingを使う必要があります:f.fields for:leagues do | builder | ? –

+0

['collection_check_boxes'](http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-collection_check_boxes)' f.collection_check_boxes(league_ids、League.all、:id、:)のようなものです。名前) ' –

+0

素晴らしい作品です!しかし、私たちは右の編集のために同じ方法を使用できませんか? collection_check_boxesを使用すると、更新メソッドのチェックを変更しても、最後の関連付けを削除して新しいものを作成することはありません。レールにもそうするよう指示する方法はありますか?ハードコーディングする必要はありませんか? –

関連する問題