Rails: нужен экземпляр IO - PullRequest
       4

Rails: нужен экземпляр IO

1 голос
/ 13 декабря 2011

В моем приложении 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 :: format - это хеш-таблица имен форматов в виде строки, ширины и высоты в пикселях и качества изображения-jpg.

В чем ошибка?

И format_from_yaml вот так:

  def formats_from_yaml
    YAML.load(self.formats)
  end

self.formats - это хеш с именем формата и URL-адресом изображения. edit: self.formats это хеш как yaml.

Что меня смущает, так это то, что если я вызову Image.first.formats_from_yaml через консоль rails, он будет работать.

В чем ошибка?

1 Ответ

1 голос
/ 13 декабря 2011

YAML.load принимает поток или строку ввода-вывода в качестве параметра и загружает из него документ.Если self.formats является хэшем, зачем передавать его в YAML.load?Кажется, блок должен быть:

define_method(name) do
  self.formats[name][:url]
end
...