проверка повторяющихся записей в модели рельсов - PullRequest
0 голосов
/ 30 августа 2010

Если у меня есть модель Department с колонками user_id и group_id

Когда action пытается сохранить запись в этом model, которая уже существует, то есть 1 (user_id), 22 (group_id) уже существует, в то время я хочу вызвать нарушение. Как это сделать в рельсах?

Ниже приведен код, который я использую для сохранения прямо сейчас:

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 ]

2 голосов
/ 31 августа 2010

Но я думаю, что вам нужно проверить, что есть только один отдел с парой user_id = 1, group_id = 22. Этого можно достичь с помощью:

validates_uniqueness_of :user_id, :scope => [:group_id]
0 голосов
/ 30 августа 2010

редактировать
Возможно, я вас неправильно понял, и, возможно, все, что вам нужно, это validates_uniqueness_of check. Дайте мне знать, если я что-то пропущу.

Active Records имеет метод new_record?, чтобы определить, сохранен ли уже объект (существует ли для него запись в базе данных).
Я копирую это демо из руководства по рельсам :

>> 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

Вы также можете использовать встроенные проверки рельсов, что-то вроде

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

Вы можете найти больше информации о проверке рельсов в учебнике, на который я ссылался выше.

...