Rails:需要IO的实例

时间:2011-12-13 05:11:37

标签: ruby-on-rails-3 image io

我的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,它将会起作用。

错误是什么?

1 个答案:

答案 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