在has_and_belongs_to_many中验证至少一个

cma*_*han 23 activerecord model ruby-on-rails

我有一个模型:

has_and_belongs_to_many :users
Run Code Online (Sandbox Code Playgroud)

如何验证模型在模型中至少有一个用户?我试过了:

validates_presence_of :users
Run Code Online (Sandbox Code Playgroud)

但这似乎没有给我我想要的东西......

Jak*_*zok 34

我会写自定义验证:

validate :has_users?

def has_users?
  # rails 2:
  errors.add_to_base "Model must have some users." if self.users.blank?
end
Run Code Online (Sandbox Code Playgroud)

那就是那样做的.

注意在rails 3+中你必须使用:

  # rails 3+
  errors.add :base, "Model must have some users." if self.users.blank?
Run Code Online (Sandbox Code Playgroud)

在rails 4+中有一个内置的快捷方式,所以你可以简单地做:

validates :users, presence: true
Run Code Online (Sandbox Code Playgroud)

  • 我需要使用`self.errors.add:base,"模型必须有一些用户." ` (9认同)

Jac*_*ius 29

在rails 4中你可以做到

validates :users, presence: true
Run Code Online (Sandbox Code Playgroud)