0

Есть ли способ заставить модель выполнить сообщение об ошибке, например flash[:notice]?Рельсы, избегающие дублирования ввода базы данных (многие атрибуты)

Я хочу, чтобы не вводить одни и те же данные в свою базу данных в два раза ..

before_save :no_duplication 

private 

    def no_duplication 
     if CarPrice.where(:car_id => self.car_id).where(:agent_id => self.agent_id).blank? 
      return true 
     else 
      return false 
     end 
    end 

Этот код остановки дублирования, но он не посылает никаких сообщений об ошибках. Как я могу это исправить?

+0

Возможная дубликат [Доступ рельсов флэш \ [: обратите внимание \] в модели] (http://stackoverflow.com/questions/2701932/accessing-rails-flashnotice-in-a-model) – Pavan

ответ

4

Я предпочел бы, используя модель проверки:

validates :car_id, uniqueness: { scope: :agent_id } 

Возьмите взглянуть на документы для других опций, таких как allow_nil: истинные и т.д. http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html

Я бы также рекомендовал добавить уникальный индекс:

add_index :name_of_table, [:car_id, :agent_id], unique: true 
+0

validates: car_id, уникальность: {scope:: agent_id} Вы имеете в виду, что эта строка заменяет весь мой код? – amronrails

+0

Да - вот что я буду делать. Я не вижу необходимости в вашем текущем методе before_save. –