1
私の質問には、いくつかの異なる活性記録RailsのActive Recordのテーブル団体
class Respondent < ActiveRecord::Base
has_many :phone_numbers, :dependent => :destroy
has_many :email_addresses, :dependent => :destroy
belongs_to :phone_number, :foreign_key=> "primary_phone_id"
belongs_to :email_address, :foreign_key=> "primary_email_id"
end
class User < Respondent
end
class EmailAddress < ActiveRecord::Base
belongs_to :respondent
has_one :respondent
end
スキーマが含まれ、これらのテーブルは
create_table "email_addresses", :force => true do |t|
t.string "email"
t.integer "respondent_id"
end
create_table "respondents", :force => true do |t|
t.string "first_name"
t.string "last_name"
t.integer "primary_email_id"
t.integer "primary_phone_id"
t.string "type"
end
私は何を達成しようとしていることは、回答者を持つことであるので、あるために複数の電子メールアドレスを持つことができますが、プライマリは1つだけです。このため、電子メールレコードと回答者は互いにリンクを記録します。すべての電子メールアドレスはemail_addressレコードに格納され、回答者を参照し、回答レコードには1つの電子メールのみに対するIDが割り当てられます。
UserControllerでは、次のコードは、
def create
@user = User.new(params[:user])
@primary_email = EmailAddress.new(params[:primary_email])
User.transaction do
@user.primary_email = @primary_email <=Undefined Method primary_email=
@user.save!
@primary_email.save!
redirect_to :action => :show, :id => @user
end
end
最初に失敗した、これは私がやっている何でも可能ですか? このコントローラコードを動作させるためにコードを変更するにはどうすればよいですか?
は、に加えて、このですか..? belongs_to:email_address、:foreign_key => "primary_email_id" – stellard
これはエラーを取り除き、電子メールは適切な外部キーを持つEmailAddressレコードに保存されます。しかし、回答者のprimary_email_idはまだnullです。 – stellard