Использование одной формы для создания двух моделей с перекрывающимися атрибутами в Rails - PullRequest
0 голосов
/ 11 декабря 2011

Этот пост кажется хорошим для того, чтобы создать две модели с одной формой. Но как бы вы это сделали, если две модели имеют один или несколько атрибутов?

1 Ответ

1 голос
/ 11 декабря 2011

Этот пост выглядит довольно устаревшим, я бы рекомендовал вместо него использовать accepts_nested_attributes_for и fields_for в вашей форме.Тем не менее, перекрывающиеся атрибуты, вероятно, должны быть установлены в обратных вызовах вашей модели.Скажем, вы хотите, чтобы имя проекта автоматически устанавливалось на имя первого задания.

class Project < ActiveRecord::Base
  has_many :tasks
  accepts_nested_attributes_for :tasks
  before_validation :set_name_from_task

  private
  def set_name_from_task
    self.name = tasks.first.name
  end
end

Если ваши две модели совершенно не связаны, вы можете назначить им определенные параметры непосредственно в контроллере.

def create
  @foo = Foo.new(params[:foo])
  @bar = Bar.new(params[:bar])

  @bar.common_attr = params[:foo][:common_attr]

  # validation/saving logic
end

Хотя это не очень хорошая практика, в идеале эту логику следует перенести в модели.

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