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 返回您想要的 Invoice 集合

开始 :

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

我认为 collection_select 无法实现您想要做的事情,除非您将包含的帮助器添加money到您的模型中。

于 2012-07-28T22:29:19.143 回答