Загрузка файла - невозможно преобразовать хэш в целое число - PullRequest
0 голосов
/ 13 ноября 2010

Я реализовал форму с загрузкой изображений с помощью скрепки на рельсах 3.0.1 на Linux (та же проблема ниже на рельсах 3.0.0 на windows)

Что бы я ни ввел в свою форму, я получил ошибку типа "не могу преобразовать хэш в целое число". Странно то, что это сработало 1 раз (форма отправки + загрузка файла). Я, вероятно, что-то изменил где-то в коде, и это никогда не работало снова. (Я не могу понять, где я ошибся)

Вид:

<% form_for(@account,:url=>{ :action=>'create' },:html => { :multipart => true }) do |f| %>
  <%= render :partial => 'form', :locals => { :f => f } %>
  <%= f.submit %>
<% end %>

_form:

<%= f.error_messages %>
<%= f.text_field :company_name %><br />
<%= f.text_field :code %><br />
<%= f.text_field :website  %><br />
<%= f.file_field :logo  %><br />
<%= f.collection_select('industry_id', @industries, :id, :label, :include_blank=>true) %>

Контроллер:

def new
    @industries = Industry.find(:all, :order => 'label')
    @account = Account.new
end

def create
    @account = Account.new(params[:account])
    @account.begin_date = DateTime.now
    @account.active = 1
    if @account.save #LINE 247: 
      flash[:notice] = 'Account was successfully created.'
      redirect_to :action => 'show', :id => @account.id
    else
      render :action => 'new'
    end
  end

Модель:

  has_attached_file :logo,
    :styles => {
    :thumb=> "100x100#",
    :small  => "150x150>",
    :medium => "300x300>",
    :large =>   "400x400>" },
    :url  => "/logos/:id/:style/:basename.:extension",
    :path => ":rails_root/public/logos/:id/:style/:basename.:extension"

LOG:

Started POST "/accounts/create" for 127.0.0.1 at 2010-11-13 10:08:27 +0800
[1m[36mSQL (31.2ms)[0m  [1mdescribe `groups_users`[0m
Processing by AccountsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"ihg8Il2eHnMj/q9KmZPzOSB8W7NDs3hbpkEJ+WSHd10=", "account"=>{"company_name"=>"aa and co", "code"=>"aaco", "website"=>"aa.com", "logo"=>#<File:/usr/tmp/RackMultipart20101113-3624-oowopi>, "industry_id"=>"1"}, "commit"=>"Create Account"}
[1m[35mUser Load (0.0ms)[0m  SELECT `users`.* FROM `users` WHERE (`users`.`id` = 1) LIMIT 1
[1m[36mUserType Load (0.0ms)[0m  [1mSELECT `user_types`.* FROM `user_types` WHERE (`user_types`.`id` = 1) LIMIT 1[0m
[paperclip] identify -format %wx%h "/usr/tmp/stream20101113-3624-s1ybvo.jpg[0]" 2>NUL
[paperclip] convert "/usr/tmp/stream20101113-3624-s1ybvo.jpg[0]" -resize "100x" -crop "100x100+0+2" +repage "/usr/tmp/stream20101113-3624-s1ybvo20101113-3624-7z7f43" 2>NUL
[paperclip] identify -format %wx%h "/usr/tmp/stream20101113-3624-s1ybvo.jpg[0]" 2>NUL
[paperclip] convert "/usr/tmp/stream20101113-3624-s1ybvo.jpg[0]" -resize "150x150>" "/usr/tmp/stream20101113-3624-s1ybvo20101113-3624-124zkow" 2>NUL
[paperclip] identify -format %wx%h "/usr/tmp/stream20101113-3624-s1ybvo.jpg[0]" 2>NUL
[paperclip] convert "/usr/tmp/stream20101113-3624-s1ybvo.jpg[0]" -resize "300x300>" "/usr/tmp/stream20101113-3624-s1ybvo20101113-3624-1jd454b" 2>NUL
[paperclip] identify -format %wx%h "/usr/tmp/stream20101113-3624-s1ybvo.jpg[0]" 2>NUL
[paperclip] convert "/usr/tmp/stream20101113-3624-s1ybvo.jpg[0]" -resize "400x400>" "/usr/tmp/stream20101113-3624-s1ybvo20101113-3624-w8mrk8" 2>NUL
[1m[35mSQL (0.0ms)[0m  BEGIN
[1m[36mSQL (0.0ms)[0m  [1mROLLBACK[0m Completed   in 1547ms

TypeError (can't convert Hash into Integer):
app/controllers/accounts_controller.rb:247:in `create'

Я предполагаю, что ошибка исходит от формы, но я не могу понять, где.

Любая помощь будет принята с благодарностью.


Самое странное, что эта форма работала дважды: Вчера утром, сразу после запуска компьютера, я запустил приложение, отправил форму, и она заработала. Позже мне вообще не удалось заставить его работать (и я ничего не изменил)

Этим утром я запустил компьютер и смог отправить форму (не пробовал с изображением в то время). Попытка еще раз, и это не удалось. Перезагрузка компьютера была бесполезной.

То, что я сейчас делаю, - это удаление из формы всех полей, кроме 1, и любого кода из контроллера, кроме: @ account.save, но я все еще получаю ту же ошибку, игнорируя проверки в моей модели ...

Я также пытался использовать html-форму, непосредственно закодированную в представлении (не используя form_for или form_tag), и получал тот же результат. Так что, вероятно, можно предположить, что проблема не в контроллере или в представлении ... (и это не проблема скрепки)

1 Ответ

0 голосов
/ 14 ноября 2010

Проблема исправлена! Два дня борьбы с кодом, который не был виноват ...: (

Произошла ошибка при проверке в моей модели!

validates_length_of :code, :is=>9, :message=>"has %d chars"

Единственный раз, когда он работал как обычно, возможно, ввод 9 символов и проверка не должна была отображать сообщение% d ...

...