2011-05-12 70 views
0

选项我有一个名为Metadatum模型(傻,我知道),其中有两个字段,keyvalue。一个键的前缀是它的类型,后跟一个下划线。可能的类型是modifier_option_uom_(计算单元),然后接着是用户定义键。例如:uom_ounce过滤器collection_select

我的Metadatum类方法定义的类型:

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

我的目标是:

def self.types 
    { 'Modifier' => 'modifier', 'Option' => 'option', 'Unit of Measure' => 'uom'} 
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}" 

本来,我用Metadatum.all代替了页面,但这不是所期望的结果。

是否有一种简单的方法来筛选选择框的选项?

+0

那很简单。我不得不从查询中删除'''.first'''。 – Jeff 2011-05-18 18:35:16

回答

0

无意识的编程错误。我的电话是.first。我删除它,现在它可以工作。

+0

请记住接受你自己的答案 – corroded 2011-05-19 12:08:02