0

私は今このように見える部分を持っています:

<%= render(:partial => 'order', :object => Order.new %>

:object => Order.new のように、いくつかの空の LineItem オブジェクトを Order.new に組み込むにはどうすればよいですか?

Order has_many :line_items であることに注意してください。および LineItem belongs_to :order

そして、コメンターが言及したように、これは最初は MVC 設計に違反しているように見えるかもしれませんが、このレンダーが実際には link_to_function ヘルパーにあることを忘れていました。これは、属性ライン アイテムのフィールドを動的に挿入する役割を果たします。

実際のヘルパーは次のようになります。

#orders_helper.rb
  def add_line_item_link(name, form_scope)
    link_to_function name, :class => "add_line_item_link" do |page|
      line_item_html = render(:partial => 'line_item', :object => @order.line_items.new, :locals => {:f => form_scope})
      page << %{
        var time_index = new Date().getTime();
        var line_item_html = #{line_item_html.to_json};
        line_item_html = line_item_html.replace(/_\\d+/g, "_"+time_index);
        line_item_html = line_item_html.replace(/\\[\\d+\\]/g, "\\["+time_index+"\\]");
        $('line_items').insert({bottom: line_item_html});
      }
    end
  end

@order.line_items.new は、私が取り組みたいものです。

最初に: @order オブジェクトに line_item を 1 つだけではなく、3 つ作成します。2 つ目: 項目には「タイトル」という名前の属性があり、注文を受けるたびに、ほとんどの場合、1 つはタイトル エディター、1 つはタイトル フォトグラファー、もう 1 つはタイトル ビデオ エディターの 3 つのライン アイテムを持ちます。

だから私は、多分私は次のようなことができると思いました:

#orders_controller.rb
@titles = %w(editor photographer video-editor)

#orders_helper.rb
...#same as above
:partial => 'line_items', :collection => lambda { @titles.each {|t| @order.line_items.build(:title => t) } return @order.line_items}
...

助言がありますか?ありがとうございました

4

3 に答える 3

1

マットの答えのリファクタリング:

def default_line_items
  line_items.build %w(editor photographer video_editor).collect { |i| {:title => i } }
end

一行。同じことをします。

于 2009-12-12T03:49:04.560 に答える
0

変更された質問への回答として--

#order.rb
def default_line_items
  self.line_items.build(:title => "editor")
  self.line_items.build(:title => "photographer")
  self.line_items.build(:title => "video_editor")
  return self.line_items
end
#call to partial
render (:partial => "line_item", :collection => order.default_line_items)
于 2009-12-11T05:21:04.607 に答える
0

申し訳ありませんが、これは私にとって深刻なコードの匂いです。MVC 原則の違反。ビュー レイヤーは、モデル レイヤーと直接やり取りする必要はありません。

于 2009-12-11T05:27:17.817 に答える