rails 3如何将关系限制为1

时间:2011-12-13 18:44:23

标签: ruby-on-rails ruby-on-rails-3 callback

我有用户频段和代码。

用户创建代码,该代码具有user_id和band_id。

我有一个前保存回调生成代码。

before_create :generate_code

  private
    def generate_code      
      self.code = SecureRandom.hex(3)
    end

我需要添加一个检查,如果代码存在user_id和band_id,则返回false

这样一个用户每个频段只有一个代码

想法?

1 个答案:

答案 0 :(得分:1)

如果您想在获得有效代码之前继续生成,请尝试:

def generate_code
  begin
    self.code = SecureRandom.hex(3)
  end while User.exists?(:code => self[:code])
end

如果您只想尝试一个代码,并返回false,请尝试:

def generate_code
  self.code = SecureRandom.hex(3)
  return false if User.exists?(:code => self[:code])
end

注意:将“用户”更改为您正在检查碰撞的关系:)

或者,您可以尝试validates :code, :uniqueness => true或类似的东西:)