Как «принять» вложенные экземпляры объектов класса, запустив пользовательский метод перед их сохранением? - PullRequest
1 голос
/ 02 октября 2011

Я использую Ruby on Rails 3.1.0 и хотел бы запустить метод :reject_if ( как , описанный в официальной документации , связанной с методом accepts_nested_attributes_for враздел «Один ко многим» для экземпляров объектов класса « вообще » (то есть для запуска метода :reject_if , а не для атрибутов - как сделано всвязанная документация - но с записями, которые должны «впоследствии» храниться в базе данных).В двух словах, я хотел бы отклонить \ отфильтровать некоторые вложенные экземпляры объектов модели \ класса, которые должны храниться в базе данных, запустив пользовательский метод для этих экземпляров.

Например, если у меня есть следующее:

class User < ActiveRecord::Base
  has_one :article,

  accepts_nested_attributes_for :article
end

Я хотел бы сделать что-то вроде этого (следующий код не работает):

class User < ActiveRecord::Base
  has_one :article,

  # Note: by using 'article' in the block I (would like to) refer to class
  # object instances
  accepts_nested_attributes_for :article, :reject_if => { |article| article.can_be_created? }
end

class Article < ActiveRecord::Base
  def can_be_created?
    true if user.has_authorization?
  end
end

Возможно ли это?Если да, то как я могу это сделать?

1 Ответ

0 голосов
/ 02 октября 2011

Создайте метод, который возвращает логическое значение, и присвойте имя метода в качестве символа для :reject_if, например:

accepts_nested_attributes_for :article, :reject_if => :article_uncreateable?

def article_uncreateable?
  !Article.new(article_attributes).can_be_created?
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...