如果我的模型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
答案 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验证的更多信息。