如何验证has_one关系?

时间:2019-02-11 09:52:49

标签: ruby-on-rails

我有这两个模型

User.rb

has_one :bike

Bike.rb

belongs_to :user

如果user试图创建多个bikes,则has_one关系没有任何意义。

如何在模型级别为此条件添加验证?

如何确保user总是有一辆自行车?

2 个答案:

答案 0 :(得分:1)

bike.rb 文件中创建一个before_create回调。检查current_user.bike是否有记录。如果记录存在,则添加错误并返回。

class Bike < ApplicationRecord

  # Associations
  has_one :user

  before_create :user_exists

  private
  def user_exists
    if self.user.bike.present?
      errors[:base] << "Add your validation message here"
      return false
    end
  end

end

答案 1 :(得分:1)

您只需在validates_uniqueness_of模型上添加一个Bike调用即可。

class Bike < ApplicationRecord
  belongs_to :user

  validates_uniqueness_of :user_id
end