过滤器collection_select的选项

时间:2011-05-12 15:44:40

标签: ruby-on-rails

我有一个名为 Metadatum 的模型(傻,我知道),它有两个字段, key {{1 }} 即可。一个键的前缀是它的类型后跟一个下划线。可能的类型是 value modifier_ option_ (计量单位),然后是后跟用户定义的密钥。例如:uom_

我在uom_ounce的类方法中定义类型:

Metadatum

我使用此实例方法从用户定义的键中解析出我的静态类型:

def self.types
    { 'Modifier' => 'modifier', 'Option' => 'option', 'Unit of Measure' => 'uom'}
end

我的目标是为每种类型提供一个选择框。以下是我试图完成它的方法:

def parsed_key
    self.key.split('_', 2).last
end

当我尝试在浏览器中呈现页面时,收到以下错误消息:

<% Metadatum.types.each do |type| %>
    <%= f.fields_for :item_metadata do |builder| %>
        <%= cell((builder.label :fk_metadatum_id, type.first),   (builder.collection_select(:fk_metadatum_id, Metadatum.where(["key LIKE ?", "%#{type.last}%"]).first, :id, :parsed_key, options ={:prompt => "- #{type.first}"}) ))%>
    <% end %>
<% end %>

以下是有问题的代码:

undefined method `map' for #<Metadatum:0x1c9c68b38>

最初,我改为Metadatum.where(["key LIKE ?", "%#{type.last}%"]).first, :id, :parsed_key, options ={:prompt => "- #{type.first}" 并且呈现了页面,但这不是理想的结果。

是否有一种简单的方法可以过滤选择框的选项?

1 个答案:

答案 0 :(得分:0)

无意识的编程错误。

我在集合上调用了.first。我删除它,现在它可以工作。