是否有人知道如何让collection_select
为文本方法的名称而不是其值命名其字段?
我有print_100
,print_200
和print_500
,并计划在必要时添加更多内容。我希望从Billing
所有以print_
开头的字段中读取选择框的值,以便选择框只包含100
,200
等选项,和500
。
f.collection_select(:print_quantity, Billing.all, :print_100, :print_100)
有什么想法?欢呼声。
答案 0 :(得分:1)
我不像我想要的那样熟悉这部分导轨,所以请保持温和。
语法是 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..."}) %>
希望能有所帮助。