【问题标题】:Rails Active Record table associationsRails Active Record 表关联
【发布时间】:2009-03-11 19:02:08
【问题描述】:

我的问题涉及一些不同的活动记录

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 记录中并引用响应者,并且响应者记录只有一个电子邮件的 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

首先,这可能是我正在做的事情吗? 如何修改代码以使此控制器代码工作?

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    是的,您只需要回复者具有关联的主要电子邮件地址:

    has_one :primary_email, :class_name => "EmailAddress"
    

    【讨论】:

    • 这是除了..吗? belongs_to :email_address, :foreign_key=> "primary_email_id"
    • 这确实消除了错误,并且电子邮件使用正确的外键保存在 EmailAddress 记录中。但是,Respondent 中的 primary_email_id 仍然为空.. 有什么想法吗?
    猜你喜欢
    • 2017-10-14
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多