0

MVCに従ってこれをコーディングするためのより良い(適切な)方法は何ですか?状況は次のとおりです。

フォームにcollection_selectがあり、正常に機能しますが、次のようなことをしたいと思っています(オプションのテキスト、4番目の引数に注意してください)

#Form.html.haml
= form_for(@payment) do |f|
 = f.collection_select(:invoice_id, Invoice.due, :id, :number + ' ' + money(:amount_due))

私の知る限り、シンボルを連結することはできないので、それは機能しません。だから、私はこれに頼りました:

#Form.html.haml
= form_for(@payment) do |f|
  = f.collection_select(:invoice_id, Invoice.due, :id, :number_with_amount_due)

#Invoice.rb
def number_with_amount_due
  "##{number} (#{money(amount_due)})"
end

モデルでヘルパーメソッドを呼び出そうとしなかった場合、これは機能します。

だから私は何をすべきですか?ビュー内の選択したテキストを連結できると便利ですが、不可能な場合は、Railsで適切なMVCを維持しながら、私がやろうとしていることをどのように達成できますか?

4

1 に答える 1

1

間違ったので、答えを大幅に編集しました。

f.selectを使用すると、必要なものを正確に含む配列を提供できます。Invoice.dueが希望する請求書のコレクションを返すと仮定します

ここに行きます:

f.select(:invoice_id, Invoice.due.map {|i| ["#{i.number} #{money(i.amount_due)}", i.id]})

money含むヘルパーをモデルに追加しない限り、collection_selectはあなたがやろうとしていることを達成できないと思います。

于 2012-07-28T22:29:19.143 に答える