0

私の Rails アプリには、新しいオブジェクトのネストされたモデルを受け入れるフォームがいくつかあります。たとえば、次のようになります。

class Maker < ActiveRecord::Base
  has_many :cars
  accepts_nested_attributes_for :cars
end

class Car < ActiveRecord::Base
  belongs_to :maker
end

ただし、そのフォームを表示する前に、Maker モデルのネストされたモデルをいくつか構築する必要があります。そうしないと、フォームに表示されません。例えば:

maker = Maker.new
3.times do
  maker.cars.build
end

しかし、このコードは理想的にはどこに行くべきでしょうか? 独自のform_display機能としてのモデル、コントローラー、デコレーターなどで?

4

1 に答える 1

1

この質問への回答は、ある程度意見に基づいています。関心の分離の観点から、プロジェクトで既にデコレーターを使用している場合は、コントローラーやモデルよりもそこにロジックを配置する方が理にかなっている可能性があります。

# maker_decorator.rb
def cars
  if object.new_record? && object.cars.none?
    3.times { object.cars.build }
  end

  object.cars
end

デコレーターを扱いたくない場合は、コントローラーにロジックを配置するのが合理的なアプローチのようです (複数のアクションで重複しない限り)。

# makers_controller.rb
def new
  @maker = Maker.new
  3.times { @maker.cars.build }
end

この機能を処理するためにモデル コードを追加することはありません。これは、モデルとビューの問題がかなり露骨に混在accepts_nested_attributes_forしているためです。「フォームオブジェクト」はこの問題を回避しますが、それはあなたのケースでは重い解決策かもしれませんが、現時点ではこのパターン用に確立されたライブラリや規則はほとんどありません (このブログ投稿の #3 を参照)。

于 2013-09-27T02:14:54.140 に答える