ruby-on-rails - 在 Rails 用户模型中设置 default_address

标签 ruby-on-rails activerecord data-modeling

我目前正在为 has_many :addressesUser 开发一个模型;这些地址形成一个小型地址簿,用户可以从中选择送货和邮寄地址。

我的问题是,将 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/

相关文章:

ruby-on-rails - Rails 4 中有类似 `ILIKE` 的方法吗?

mysql - Rails 5 数据库迁移错误

mysql - Rails has_many/belongs_to 自定义数据库 ActiveRecord::AssociationTypeMismatch 得到 Fixnum

sql - Oracle 中的外键约束

mysql - 数据库设计: use a non-key as a FK?

ruby-on-rails - 如何更改 ActiveScaffold "actions"的显示顺序?

javascript - Rails 设计 + omniauth-stripe-connect "Authorization code does not belong to you"

ruby-on-rails - 在 redis 中使用 ZINCRBY 存储哈希

ruby-on-rails - 不包含零的事件记录

hibernate - Grails 映射问题 - 多对多