2009-03-11 21 views
1

Sorum birkaç farklı etken kayıtlarıRaylar Active kayıt tablosu dernekler

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 

şema içeren bu tablolar

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 

Ne başarmaya çalışıyorum yanıt verenleri sahip olmaktır ve bu nedenle vardır için Birden fazla e-posta adresi olan ancak yalnızca bir tane birincil olan kullanıcılar. Bu nedenle e-posta kaydı ve yanıt verenler birbirleriyle bağlantı kurar. Tüm e-posta adresleri email_address kaydında saklanır ve yanıtlayana referans verir ve yanıtlayan kaydın yalnızca bir e-postaya bir kimliği vardır. UserController yılında

Aşağıdaki kod, bu ne yaptığımı bile mümkündür,

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 

İlk başarısız? Bu denetleyici kodunun çalışması için kodu nasıl değiştirebilirim?

cevap

2

Evet, sadece Davalı olarak ilişkili birincil e-postalar olması gerekir:

has_one :primary_email, :class_name => "EmailAddress" 
+0

bu ektir ..? belongs_to: email_address,: foreign_key => "primary_email_id" – stellard

+0

Bu hatadan kurtulur ve e-posta, EmailAddress kaydına doğru yabancı anahtarla kaydedilir. Ancak, Respondent'teki primary_email_id hala boş… herhangi bir fikir? – stellard

İlgili konular