Как можно проверить условие в модели? - PullRequest
0 голосов
/ 10 января 2019

У меня возникла проблема при попытке создать условие проверки, чтобы не разрешать сохранять записи, если они существуют.

таблица открытых_курсов

|id|   |name|
  1     Course 1
  2     Course 2

столовые сервизы

|id|  |name|
  1  mover 1
  2  Mover 2

таблица open_course_deails

|id| |open_course_id|  |mover_id
  1        1                1    #correct save
  2        2                1    #correct save
  3        1                2    #correct save
  4        2                2    #correct save
  5        1                1    #should not save the information
  6        1                2    #should not save the information
  7        2                1    #should not save the information
  8        2                2    #should not save the information

Вот контроллер.

def new
  @open_course_detail= OpenCourseDetail.new
end

def create
  @open_course_detail.new(open_course_params)
  if @open_course.save
    redirect_to :index
  end
end

Вот вид.

<%= form_for @open_course_detail do |f| %>
  <%= f.text_field :open_course_id  %>
  <%= f.text_field :mover_id  %>  
<$ end %>

Вот модель open_course_detail.rb

validates :open_course_id,:uniqueness => { message => "Already in use" }

Также я попробовал:

 validates :mover_id,:uniqueness => { message => "Already in use" }

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Пользовательская проверка -

  class OpenCourseDeails < ApplicationRecord

      validate :record_present

      def record_present
        records = OpenCourseDeails.where("open_course_id = ? AND mover_id = ?", self.open_course_id, self.mover_id)
        if records.present?
          errors.add(:record, "Already present!")
        end
      end

  end
0 голосов
/ 10 января 2019

Если я правильно понял, у вас не может быть более одной пары на ряд. Попробуйте scope

validates :open_course_id, :uniqueness => { :message => "Already in use", :scope => :mover_id }

или наоборот, решать вам.

...