2015-12-19 3 views
0

Я только начал пробовать руки на Ruby на рельсах. Я создал режим состояние и хочу, чтобы каждое имя государства должно оставаться уникальным, так что я использовалВалидация уникальности аутентификации Activerecord ruby ​​on rails 4.2

uniqueness: true 

согласно http://guides.rubyonrails.org/active_record_validations.html. Как указано выше, в документе говорится, что проверка выполняется автоматически при вызове object.save. но когда я пытаюсь сохранить объекты с таким же значением state_name, не генерируется исключение, и запись сохраняется. Могу ли я помочь, когда я делаю это неправильно.

код модели

код
class State < ActiveRecord::Base 
    acts_as_paranoid 
    validates_presence_of :state_name ,uniqueness: true 
end 

Контроллер

def create 
@stateName = params[:stateName]; 
@state = State.new(); 
@[email protected]; 
if(@state.save()) 
    resp = { :message => "success" } 
else 
    resp = { :message => "fail" } 
end 

respond_to do |format| 
    format.json { render :json => resp } 
end 
end 

Заранее спасибо за помощь!

ответ

2

Если вы хотите единственность проверить, изменить

validates_presence_of :state_name ,uniqueness: true 

в

validates :state_name, uniqueness: true 

Если вы хотите уникальность и наличие проверить и используйте

validates :state_name, uniqueness: true, presence: true 

Альтернативный синтаксис приведен ниже, однако syntax shown above should be preferred

validates_uniqueness_of :fname 
validates_presence_of :fname 

Кроме того, в соответствии с documentation, обратите внимание на следующие моменты в отношении использования uniqueness: true

Это не создает ограничение уникальности в базе данных, так что может случиться так, что два разных подключения к базе данных создать два записи с то же значение для столбца, который вы намереваетесь быть уникальным. Чтобы избежать , вы должны создать уникальный индекс в обоих столбцах в базе данных.

Проверка выполняется, выполняя SQL-запрос в таблице модели , ища существующую запись с тем же значением в этом атрибуте .

Что это означает, что вполне возможно, что если несколько пользователей пытаются сохранить записи одновременно, есть возможность запись с дубликатом state_name может получить создана как каждый save происходит на другом потоке

+0

Okay .. спасибо за помощь. Если мне нужно создать уникальное ограничение в базе данных, чтобы обеспечить уникальность, почему даже я беспокоюсь о подтверждении уникальности с помощью модели ... db wont let duplicate entry come in anyhow !!! –

Смежные вопросы