1

有谁知道collection_select为文本方法的名称而不是它们的值命名其字段的方法?

我有print_100print_200和 ,print_500并计划在必要时添加更多。我希望选择框的值从Billing所有以开头的字段中读取,print_因此选择框只有100,200500.

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

有什么想法吗?干杯。

4

2 回答 2

1

我对rails的这一部分没有我想的那么熟悉,所以要温柔。

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和来使其工作text_method,这些参数定义了应将哪些值应用于标签.

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

祝你好运。

于 2012-10-12T00:54:35.680 回答
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_selectselect,因此:

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

希望对某人有所帮助。

于 2012-10-12T02:33:08.547 回答