2011-06-22 3 views
0

2つのモデル、EventPersonがあるとします。イベントが人であるコーディネーターがあります。私のフォームでRails - 既存のオブジェクトにモデルを関連付けるか、新しいモデルを作成できるようにする

class Event < ActiveRecord::Base 
    belongs_to :coordinator, :class_name => 'Person', :foreign_key => 'coordinator_id' 
    accepts_nested_attributes_for :coordinator 
end 

class Person < ActiveRecord::Base 
    validates :name, :length => 20 
end 

を、私は、ユーザーが(のは、ラジオボタンのリストを言わせて)既存の人々のオブジェクトから選択できるように好きですが、またのテキストボックスを持っているでしょう新しいPersonを作成します(名前はテキストボックスに入力します)。

これをうまく実装するにはどうすればよいですか?私はそれを理解することができますが、コントローラには醜いコードが多く含まれており、検証するのに苦労します。

答えて

2

私はラジオボタンがperson [id]を設定してからidをチェックしたのと同じようなことをしました。

方法作成だから私のコントローラ#で:

if params[:person][:id] 
    @person = Person.find(params[:person][:id]) 
else 
    @person = Person.new(params[:person]) 
    #Handle saving @person here. 
end 

をフォームが何も選択されていない場合でも、それを送信した場合elseブロックでidのparamを削除する必要があります。

編集は、検証の質問に答えるために:あなたは、通常のオブジェクトを作成するために何をすべきかやるだろうとどこ#Handle saving @person here.

です。 Like:

if @person.save 
    flash[:notice] = "User created successfully" 
else 
    render :action => 'new' # (or whatever the action is) 
    return 
end 
+0

私はPersonにいくつかの検証コードがあることを忘れました。これはうまく処理できますか? – swilliams

+0

fields_forにいくつか調整を加えた後、私はそれを分かったと思う。ありがとう。 – swilliams

0

人の確認コードは、人を救うたびに実行されます。 バリデータを回避するために、@ person.save()と書いてください。
これはpcg79の回答を統合したいと思っています

関連する問題