Как пропустить проверки w / find_or_create_by_? - PullRequest
7 голосов
/ 23 августа 2011

Можно ли пропустить проверки с динамическим поиском / созданием по методу?

Например, при обычном сохранении я могу сделать что-то вроде:

p = Post.new
p.title = nil
p.body = nil
p.save(:validate => false)

Хотел бы сделать то же самое с find_or_create_by_title.

Ответы [ 2 ]

14 голосов
/ 23 августа 2011

Это не выглядит возможным с кодом в Rails прямо сейчас однако вам может повезти, если будете немного более многословны в том, как вы пишете код. Вы можете использовать find_or_initialize_by_, который создает новый объект, но не сохраняет его. Затем вы можете вызвать функцию сохранения с вашими пользовательскими параметрами, также в документации у них есть аккуратная демонстрация, которую трудно найти, поэтому я включу ее ниже:

# No 'Winter' tag exists
winter = Tag.find_or_initialize_by_name("Winter")
winter.new_record? # true

Удачи и дайте мне знать, если вам нужно больше указателей в правильном направлении.

3 голосов
/ 15 мая 2016

В некоторых случаях find_or_initialize_by_ не будет полезен, и нужно пропустить проверки с find_or_create_by.

Для этого вы можете использовать ниже альтернативный поток и метод ROR:

Обновите вашу модель так:

class Post < ActiveRecord::Base
  attr_accessor :skip_validation
  belongs_to :user
  validates_presence_of :title, unless: :skip_validation
end

Теперь вы можете использовать его так:
Post.where(user_id: self.id).first_or_create!(skip_validation: true)

Я использовал first_or_create вместо find_or_create_by здесь. Вы можете передать больше имен столбцов и значений, и ваша проверка не будет работать с этим.

  • Вы можете продолжить без каких-либо изменений для конца сильных параметров, и нет необходимости разрешать эту 'skip_validation', чтобы она работала с проверками при добавлении записей.

  • Используя это, вы можете использовать его с проверками и без них, передавая параметр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...