Переопределяющие атрибуты для массового присвоения вложенной модели - PullRequest
1 голос
/ 21 декабря 2009

В настоящее время я использую массовое присвоение вложенных моделей на одной из моих моделей. Это работает, однако я хотел бы быть в состоянии гарантировать, что любые вложенные модели, созданные «принадлежат» одному и тому же пользователю.

Мне удалось реализовать это, используя псевдоним метода с:

  def contact_attributes_with_user_id=(attributes)
    self.contact_attributes_without_user_id = attributes.merge( "user_id" => user_id )
  end
  alias_method_chain :contact_attributes=, :user_id

Теперь это работает нормально, но это означает, что у меня больше не может быть защиты атрибутов для user_id для контакта - что может легко поймать кого-то в будущем.

Может кто-нибудь придумает лучший способ?

1 Ответ

0 голосов
/ 22 декабря 2009

Что, если вы добавите before_save крючок к вашей Contact модели, например:

belongs_to :parent
validates_presence_of :parent_id

before_save :assign_user_id

private
def assign_user_id
  self.user_id = parent.user_id
end

Таким образом, user_ids ваших контактов будет следовать родительской модели, и вам вообще не придется беспокоиться о назначении (вы можете избавиться от alias_method_chain).

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