我目前正在为 has_many :addresses
的 User
开发一个模型;这些地址形成一个小型地址簿,用户可以从中选择送货和邮寄地址。
我的问题是,将 has_many
关系中的 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
但我知道这很草率,因为我的默认地址和我的用户之间有两个链接。
我应该在地址中设置默认 bool 值,并使用范围
获取默认值吗? (这增加了额外的验证,因为我不需要多个默认地址......嗯。)
我认为这在具有地址管理的应用程序中一定经常出现,所以我想我应该列出我的想法并询问。任何有关最佳实践的建议将不胜感激。
最佳答案
我会向地址添加一个“is_default”标志。然后您需要在地址中进行验证,如下所示:
validates_uniqueness_of :is_default, :scope => :user_id, :unless => Proc.new { |address| address.is_default == 0 }
这将确保您只获得一个默认地址,但允许使用任意数量的非默认地址。
关于ruby-on-rails - 在 Rails 用户模型中设置 default_address,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4390983/