rails模型中的重复条目验证

时间:2010-08-29 22:01:54

标签: ruby-on-rails validation activerecord

如果我的模型Department包含user_id列和group_id

action尝试将条目保存到已存在的model时,即1(user_id),22(group_id)已经存在,那时我想提出违规行为。在rails中执行此操作的方法是什么?

以下是我现在用来保存的代码:

if @department.save
  flash[:notice] = "Successfully created department."
  redirect_to @department
else
  render :action => 'new'
end

Department型号

class Department < ActiveRecord::Base
  belongs_to  :group
  belongs_to  :user
end

2 个答案:

答案 0 :(得分:2)

但我猜你想要的是验证只有一个部门的对称user_id = 1,group_id = 22.这可以通过以下方式实现:

validates_uniqueness_of :user_id, :scope => [:group_id]

答案 1 :(得分:0)

修改
现在,我可能误解了你,也许你想要的只是validates_uniqueness_of。如果我错过了什么,请告诉我。

Active Records有new_record?方法来确定是否已保存对象(数据库中的记录是否存在)。
我从rails tutorial复制此演示:

>> p = Person.new(:name => "John Doe")
=> #<Person id: nil, name: "John Doe", created_at: nil, :updated_at: nil>
>> p.new_record?
=> true
>> p.save
=> true
>> p.new_record?
=> false

您还可以使用内置的rails验证,例如

class Department < ActiveRecord::Base
  validate :my_validation_method, :on => update

  def my_validation_method
    errors.add_to_base("You can't update existing objects")
  end
end

您可以在我上面链接的教程中找到有关rails验证的更多信息。