12

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

f.input :apple, :as => :select, :collection => Apple.all

问题是,尽管我需要 Formtastic 来访问与名称不同的方法。现在这确实是一个问题。我总是可以通过数组

f.input :apple, :as => :select, :collection => Apple.map { |a| a.format_name }

问题是,在此之后我将在控制器中获得字符串而不是不需要的 ID。我试图通过 Hash 代替:

options = Hash.new
Apple.each { |a| Apple.store(a.format_name, a.id) }
f.input :apple, :as => :select, :collection => options

现在的问题是,由于我使用的是 Ruby 1.8.7,哈希顺序是未指定的,我当然需要有序输入......

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

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

4

3 回答 3

16

尝试:

f.input :apple, :as => :select, :collection => Apple.all, :label_method => :format_name, :value_method => :id
于 2010-09-05T08:33:29.777 回答
4

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

f.input :apple, :as => :select, :collection => Apple.map { |a| [ a.format_name, a.id ] }
于 2010-09-04T15:54:15.077 回答
1

这是现在正确的方法:

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

文档在代码注释中。

于 2017-03-22T02:34:56.817 回答