我需要将一个集合传递给Formtastic中的标准选择输入:
f.input :apple, :as => :select, :collection => Apple.all
问题是,虽然我需要Formtastic来访问与名称不同的方法。现在这确实是一个问题。我总是可以传递数组
f.input :apple, :as => :select, :collection => Apple.map { |a| a.format_name }
问题是,在此之后我会在控制器中获取字符串而不是不需要的ID。我试图传递哈希:
options = Hash.new
Apple.each { |a| Apple.store(a.format_name, a.id) }
f.input :apple, :as => :select, :collection => options
现在的问题是,由于我使用的是Ruby 1.8.7,因此未指定哈希顺序,我当然需要有序的输入......
我可以想象一些解决方案,但所有这些都需要不必要的代码。
知道如何解决这个问题吗?
答案 0 :(得分:15)
尝试:
f.input :apple, :as => :select, :collection => Apple.all, :label_method => :format_name, :value_method => :id
答案 1 :(得分:4)
在formtastic文档中没有直接指示,但是集合也可以是嵌套数组,所以问题通过以下方式解决:
f.input :apple, :as => :select, :collection => Apple.map { |a| [ a.format_name, a.id ] }
答案 2 :(得分:0)
现在这是正确的方法:
f.input :apple,
as: :select,
collection: Apple.pluck(:format_name, :id)
这会将collection
设置为[name,id]元组的数组。简单!
即将推出的方式:
使用member_label
选项,例如
f.input :apple,
as: :select,
collection: Apple.all,
member_label: :format_name