Ma question porte sur quelques différents dossiers actifsRails associations de table 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
Le schéma de ces tables sont
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
Ce que je suis en train d'accomplir est d'avoir les répondants, et par conséquent utilisateurs, capables d'avoir plusieurs adresses email mais seulement une principale. Pour cette raison, l'enregistrement de courrier électronique et les répondants enregistrent un lien les uns avec les autres. Toutes les adresses e-mail sont stockées dans l'enregistrement adresse_mail et référencent le répondant, et l'enregistrement du répondant a un identifiant pour un seul e-mail.
Dans le UserController le code suivant échoue
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
D'abord, est-ce possible ce que je fais? Comment puis-je modifier le code pour que ce code de contrôleur fonctionne?
est-ce en plus ..? belongs_to: adresse_mail,: foreign_key => "primary_email_id" – stellard
Cela permet de se débarrasser de l'erreur et l'e-mail est enregistré dans l'enregistrement EmailAddress avec la clé étrangère correcte. Cependant le primary_email_id dans Respondent est toujours nul ... une idée? – stellard