Ruby on rails 在Rails用户模型中设置默认_地址
我目前正在为一个Ruby on rails 在Rails用户模型中设置默认_地址,ruby-on-rails,activerecord,data-modeling,Ruby On Rails,Activerecord,Data Modeling,我目前正在为一个用户开发一个模型,有很多地址;这些地址形成了一个小的地址簿,用户可以从中选择送货地址和邮寄地址 我的问题是,对于我来说,将中的地址对象标记为默认地址的最佳方式是什么 一种方法(我想我是对的)是维持这种关系: class User < ActiveRecord::Base has_many :addresses, :dependent => :destroy has_one :default_address, :class_name => "Address
用户
开发一个模型,有很多地址
;这些地址形成了一个小的地址簿,用户可以从中选择送货地址和邮寄地址
我的问题是,对于我来说,将中的地址
对象标记为默认地址的最佳方式是什么
一种方法(我想我是对的)是维持这种关系:
class User < ActiveRecord::Base
has_many :addresses, :dependent => :destroy
has_one :default_address, :class_name => "Address"
class Address < ActiveRecord::Base
belongs_to :user
belongs_to :user, :foreign_key :default_address_id
class用户:销毁
有一个默认地址:class\u name=>“地址”
类地址
但我知道这很草率,因为我的默认地址和用户之间有两个链接
我是否应该在地址中设置默认布尔值,并使用范围
获取默认值?(这增加了一个额外的验证,因为我不想要多个默认地址……嗯。)
我想这在地址管理的应用程序中一定会经常出现,所以我想我应该提出我的想法,然后提问。任何关于最佳实践的建议都将不胜感激。如果是我,我会说外键属于用户,地址上有一个布尔方法来确定它是否是默认地址(假设你在应用程序中需要):
你的应用程序将需要处理逻辑,以确保使用第二种安排时只有一个默认地址。我会在地址中添加一个“is_default”标志。然后,您需要在地址中进行如下验证:
validates_uniqueness_of :is_default, :scope => :user_id, :unless => Proc.new { |address| address.is_default == 0 }
这将确保您只获得一个默认地址,但将允许任意多个非默认地址
class User
has_many :addresses
def default_address
addresses.select(&:default_address?) #overly simple implementation
end
end
validates_uniqueness_of :is_default, :scope => :user_id, :unless => Proc.new { |address| address.is_default == 0 }