关联has_one中必须进行唯一性验证

时间:2015-12-08 17:40:36

标签: ruby-on-rails

我在模型中创建了唯一性验证,以确保表中的user_id是唯一的,但我不确定关联是否有__那样做。

用户模型

class User < ActiveRecord::Base
  #association macros
  has_one :balance
end

余额模型

class Balance < ActiveRecord::Base
  #association macros
  belongs_to :user

  #validation macros
  validates :user_id, presence: true, uniqueness: true #uniqueness is necessary?
end

1 个答案:

答案 0 :(得分:2)

没有必要为此validates_presence_of,因为它是在您的数据库中处理的。但是,为了不必处理数据库错误,最好在您的模型中执行此操作。然后,在错误处理程序中构建用于验证的Rails将起作用。

如果您的表数据显示它不能为null / nil,则验证在数据库本身上,并将返回一个更难处理的错误。您将收到系统错误和Rails更好的错误&#39;信息。这基本上打破了你的应用程序。

如果您使用...

在模型中进行模型验证
validates :user_id, presence: true, uniqueness: true

然后Rails将允许您在应用程序中控制这些错误消息。您可以选择忽略它们(错误)并使数据输入几乎无声地失败。或者,您可以在控制器中打开label_errors和flash消息,以允许用户查看他们尝试在表单上输入的数据有什么问题。