Rails:collection_select命名方法

时间:2012-10-12 00:42:06

标签: ruby-on-rails-3

是否有人知道如何让collection_select为文本方法的名称而不是其值命名其字段?

我有print_100print_200print_500,并计划在必要时添加更多内容。我希望从Billing所有以print_开头的字段中读取选择框的值,以便选择框只包含100200等选项,和500

f.collection_select(:print_quantity, Billing.all, :print_100, :print_100)

有什么想法?欢呼声。

2 个答案:

答案 0 :(得分:1)

我不像我想要的那样熟悉这部分导轨,所以请保持温和。

http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-collection_select

语法是     collection_select(object,method,collection,value_method,text_method,options = {},html_options = {})

如果您要将第二个参数(method)更改为实际方法(而不仅仅是您希望从结算对象获得的属性),您可以根据需要创建值。

如果这不起作用(或者如果您不允许将该属性替换为方法),那么您可以使用第5或第6个参数value_method和{{1定义应该应用于标记的值。

无论如何,这个答案主要是指向(希望)正确的方向,因为我不确定方法或它是如何工作的。

祝你好运。

答案 1 :(得分:1)

感谢@DavidDraughnn提出这个解决方案的想法。我在相关助手中写了一个方法,因此:

def get_quantities
  @quantities = {}
  Billing.column_names.each do |a|
    if a.match(/^print_/)
      @quantities[a.delete "print_"] = a.delete "print_"
    end
  end
  return @quantities
end

我已将collection_select调整为select,因此:

<% get_quantities %>
<%= f.select(:print_quantity, @quantities, {:prompt => "Please select..."}) %>

希望能有所帮助。