重新编码,不能在模型中使用辅助方法

时间:2012-07-28 22:15:44

标签: ruby-on-rails ruby-on-rails-3 model-view-controller

根据MVC编写此代码的更好(正确)方法是什么?情况如下:

我的表单中有一个collection_select,它工作正常,但是我想做这样的事情(注意选项的文本,第4个arg)

#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的同时实现我想要做的事情?

1 个答案:

答案 0 :(得分: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的帮助程序添加到模型中。