Как проверить поле модели поля принадлежащих вам - PullRequest
0 голосов
/ 26 июня 2019

Рассмотрим следующие две модели

class Book < ActiveRecord::Base
  has_many :book_reports
  enum genre: [:fiction, :nonfiction]
end

class BookReport < ActiveRecord::Base
  belongs_to :book
end

Я хочу проверить book_reports, чтобы он сохранял только те, которые имеют жанр: беллетристика.Я могу добавить хук before_save, чтобы проверить жанр книжной ассоциации, но мне интересно, есть ли лучший способ.

Ответы [ 2 ]

1 голос
/ 26 июня 2019

Вы можете использовать пользовательские методы :

validate :belongs_to_fiction_book, on: [:create, :update]

def belongs_to_fiction_book
    errors.add(:book, "is not a fiction book.") unless book.genre == "fiction"
end
1 голос
/ 26 июня 2019

Вы могли бы вместо этого использовать before_create обратный вызов, чтобы вы могли поймать жанр немного раньше в рабочем процессе, но в противном случае ваша идея вполне обоснована:

Используйте обратный вызов для запуска проверкижанр, и если он не соответствует тому, что вы ищете, отклоните запись и продолжайте.

Вы также можете использовать обратный вызов :validates, чтобы проверить, self.genre == 'Fiction' или что-то ещеВы хотите проверить, и используйте before_validation, чтобы поймать его еще раньше.

Я рекомендую прочитать страницу RubyGuides на Обратные вызовы Active Record , чтобы понять немного больше о рабочем процессе, а затем принять лучшее решение, когда нужно на самом деле проверить желаемое значение жанра.

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