Ассоциации таблиц Rails Active Record - PullRequest
1 голос
/ 11 марта 2009

В моем вопросе несколько разных активных записей

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

Я пытаюсь добиться того, чтобы респонденты и, следовательно, пользователи могли иметь несколько адресов электронной почты, но только один основной. По этой причине записи электронной почты и респонденты записывают ссылки друг на друга. Все адреса электронной почты хранятся в записи email_address и ссылаются на респондента, а запись респондента имеет идентификатор только для одного электронного письма.

В 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

Во-первых, это вообще возможно, что я делаю? Как я могу изменить код, чтобы заставить этот код контроллера работать?

1 Ответ

2 голосов
/ 11 марта 2009

Да, вам просто нужно, чтобы Респондент имел в качестве ассоциированного основного электронного письма:

has_one :primary_email, :class_name => "EmailAddress"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...