我的Rails应用中出现此错误:
ActionView::Template::Error (instance of IO needed):
30: <tr>
31: <% @product.images.each do |img| %>
32: <td id="product_image_<%= img.id.to_s %>">
33: <%= image_tag img.miniature %><br />
34: <%= link_to_remote raw(t(:delete)), :url => { :action => :de
lete_image, :id => img.id }, :update => "product_image_#{img.id.to_s}" %>
35: </td>
36: <% end %>
app/models/image.rb:45:in `formats_from_yaml'
img.miniature看起来像这样:
Images::formats.each_key do |name|
define_method(name) do
self.formats_from_yaml[name][:url]
end
end
Images :: formats是一个哈希表,格式名称为字符串,宽度和高度(以像素为单位)和图像jpg的质量。
错误是什么?
和formats_from_yaml一样:
def formats_from_yaml
YAML.load(self.formats)
end
self.formats是一个散列,其中包含格式名称和图像的网址。编辑:self.formats是作为yaml的哈希。
令我困惑的是,如果我通过rails控制台调用Image.first.formats_from_yaml,它将会起作用。
错误是什么?
答案 0 :(得分:1)
YAML.load
takes an IO stream or string as a parameter并从中加载文档。如果self.formats
是哈希,为什么要将它传递给YAML.load?看起来块应该是:
define_method(name) do
self.formats[name][:url]
end