我有一个名为 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}"
并且呈现了页面,但这不是理想的结果。
是否有一种简单的方法可以过滤选择框的选项?
答案 0 :(得分:0)
无意识的编程错误。
我在集合上调用了.first
。我删除它,现在它可以工作。