Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails-一个用户多个地址_Ruby On Rails - Fatal编程技术网

Ruby on rails Rails-一个用户多个地址

Ruby on rails Rails-一个用户多个地址,ruby-on-rails,Ruby On Rails,我有一个用户模型 class User < ActiveRecord::Base attr_accessible :email, :password, :password_confirmation, :remember_me, :first_name, :last_name, :shipping_address_id; :billing_address_id end class用户

我有一个用户模型

class User < ActiveRecord::Base
    attr_accessible :email, :password, :password_confirmation, :remember_me, :first_name, :last_name, :shipping_address_id; :billing_address_id
end
class用户
和地址模型

class Address < ActiveRecord::Base
    attr_accessible :country_id, :city, :plz, :street, :streetnr, :first_name, :last_name
end
类地址

我想通过活动记录关联做什么:每个用户都有一个账单地址和一个发货地址。我是否可以创建一个关系,以便访问诸如user.billing\u address之类的内容?

您可以在“属于”关联中添加类名和外键

class User < ActiveRecord::Base
    attr_accessible :email, :password, :password_confirmation, :remember_me, :first_name, :last_name, :shipping_address_id; :billing_address_id
    belongs_to :billing_address, class_name: :Address, foreign_key: :billing_address_id
    belongs_to :shipping_address, class_name: :Address, foreign_key: :shipping_address_id
end

@kengo提到的方法应该有效,但更合适的方法是

class User < ActiveRecord::Base
  attr_attr_accessible :email, :password, :password_confirmation, :remember_me, :first_name, :last_name, :shipping_address_attributes; :billing_address_attributes
  has_one :billing_address, :class_name => 'Address'
  has_one :shipping_address, :class_name => 'Address'
  accepts_nested_attributes_for :billing_address
  accepts_nested_attributes_for :shipping_address
end
class用户'地址'
有一个:发货地址,:class\u name=>'地址'
接受:账单地址的\u嵌套\u属性\u
接受装运地址的\u嵌套\u属性\u
结束

通过这种方式,您可以使用嵌套的表单来接受发货地址和帐单地址的值。此外,您的基本要求也将得到满足。

是否应该是一个?在这个问题中,外键在用户模型中。为了在用户模型中使用has_one,外键必须在地址模型中。用户所属:Address,怪异。这对我来说非常有效。我以前甚至有过类似的东西,但是关联的归属错误。在这种情况下,如何设置关联密钥?我们需要在地址模型中添加列吗?我认为kengo是对的,这里缺少关联。
class User < ActiveRecord::Base
  attr_attr_accessible :email, :password, :password_confirmation, :remember_me, :first_name, :last_name, :shipping_address_attributes; :billing_address_attributes
  has_one :billing_address, :class_name => 'Address'
  has_one :shipping_address, :class_name => 'Address'
  accepts_nested_attributes_for :billing_address
  accepts_nested_attributes_for :shipping_address
end