Проверка правильности вставки массива в Rails - PullRequest
1 голос
/ 13 марта 2020

У меня есть Table1 с атрибутом attribute1, который является массивом целых чисел. Мой контроллер допускает одну вставку за раз. Итак, в контроллере:

def add_attribute1_item
  table1 = Table1.find(params[:id])
  table1.attribute1 << add_params[:attribute1_item]
  table1.save!
  render json: table1
rescue
  render_errors_for(table1)
end

Я хочу проверить это значение attribute1_item, игнорируя старые значения, которые были сохранены в массиве attribute1, например, если table1.attribute1 содержит 99, и я вызываю контроллер add_attribute1_item для добавления 100, я только хочу проверить, является ли 100 действительным или нет, игнорируя 99.

class Task < ApplicationRecord
     .
     .
     .
  validate :attribute1_item_is_valid, if: -> { attribute1.present? }
     .
     .
     .
  def attribute1_item_is_valid
    # validate the item by accessing attribute1
  end

Я не уверен с этим подходом, потому что, когда я обращаюсь к attribute1 в attribute1_item_is_valid, это новый массив вместо нового элемента , Достаточно ли хорош этот подход, вызывая attribute1.last (), или есть более правильный метод? спасибо

1 Ответ

1 голос
/ 13 марта 2020

Вместо попытки проверить это в модели, проверьте запись формы.

Создайте модель для формы и используйте обычные проверки.

class SomeForm
  include ActiveModel::Model

  attr_accessor :id, :attribute1_item

  validate :id, presence: true, numericality: { only_integer: true }
  validate :attribute1_item, presence: true
end

def add_attribute1_item
  form = SomeForm.new(params)
  if form.invalid?
    # render form.errors
    return
  end

  table1 = Table1.find(form.id)
  table1.attribute1 << form.attribute1_item
  table1.save!
  render json: table1
rescue
  render_errors_for(table1)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...