Ruby on rails 如何在Formtastic中正确传递输入集合

Ruby on rails 如何在Formtastic中正确传递输入集合,ruby-on-rails,ruby,ruby-on-rails-3,formtastic,Ruby On Rails,Ruby,Ruby On Rails 3,Formtastic,我需要将集合传递到Formtastic中的标准选择输入: f.input :apple, :as => :select, :collection => Apple.all 问题是,尽管我需要Formtastic来访问与name不同的方法。现在这真的是个问题。我总能通过阵列 f.input :apple, :as => :select, :collection => Apple.map { |a| a.format_name } 问题是,在此之后,我将在控制器中获取字符

我需要将集合传递到Formtastic中的标准选择输入:

f.input :apple, :as => :select, :collection => Apple.all
问题是,尽管我需要Formtastic来访问与name不同的方法。现在这真的是个问题。我总能通过阵列

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,哈希顺序是未指定的,我当然需要有序输入

我可以想象一些解决方案,但所有这些都需要不必要的代码


你知道如何正确解决这个问题吗?

formtastic文档中没有直接的指示,但是集合也可以是嵌套数组,所以问题可以通过以下方法解决:

f.input :apple, :as => :select, :collection => Apple.map { |a| [ a.format_name, a.id ] }
尝试:


现在这是正确的方法:

f.input :apple,
        as: :select,
        collection: Apple.pluck(:format_name, :id)
这将
集合设置为[name,id]元组的数组。轻松点

即将被弃用的方式:

使用
成员标签
选项,例如

f.input :apple,
        as: :select,
        collection: Apple.all,
        member_label: :format_name

文档是。

这对我来说很有帮助,因为我碰巧仍然在使用Ruby 1.8.7版本。谢谢如果我们不仅想要:format_name,还要像这样的smth::format_name+:另一个_name呢?
f.input :apple,
        as: :select,
        collection: Apple.all,
        member_label: :format_name