Carrierwave Gem: после создания пользователя с аватаром «невозможно преобразовать ноль в строку» - PullRequest
0 голосов
/ 12 марта 2012

Я скажу, что когда я только начал работать с несущей волны, все отлично работало, за исключением масштабирования размера аватара.

Так что теперь, после того, как я попытался выполнить масштабирование, все пошло к черту.Я удалил гем, выполнил миграцию для удаления аватара у пользователя, затем сделал еще одну миграцию для добавления.

Все та же ошибка.Заметьте, я делаю загрузчик аватар, а НЕ изображение.Я не коснулся файла avatar_uploader.rb, кроме добавления

require 'carrierwave/orm/activerecord'

в верхней строке.

Итак, действительно странная вещь:

Когда я вхожу в консоль и выполняю User.last

1.9.3p0: 001> User.last User Load (0,3ms) ВЫБЕРИТЕ "users". * FROM "users" ORDER BY "users". "id" DESC LIMIT 1 => #

Это так странно, , потому что база данных пользователей распознает изображение. Итак ... мысли?

Как уже говорилось, изначально этого не происходило.

В моей странице показа пользователей у меня есть

<p>
   <label>My Avatar</label>
   <%= image_tag(@user.avatar_url) if @user.avatar? %>
   <%= f.file_field :avatar %>
   <%= f.hidden_field :avatar_cache %>
</p>

В моей форме пользователя у меня есть:

<label>My Avatar</label>
    <%= f.file_field :avatar %>
    <%= f.hidden_field :avatar_cache %>

Я прикрепил окно сервера, чтобы показать вам, что происходит.

Started GET "/users/17" for 127.0.0.1 at 2012-03-12 13:26:28 -0500
Processing by UsersController#show as HTML
  Parameters: {"id"=>"17"}
  User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1   
[["id", "17"]]
  Rendered users/show.html.erb within layouts/application (1.9ms)
Completed 500 Internal Server Error in 5ms

ActionView::Template::Error (can't convert nil into String):
    7: 
    8: <p>
    9:    <label>My Avatar</label>
    10:    <%= image_tag(@user.avatar_url) if @user.avatar? %>
    11:    <%= f.file_field :avatar %>
    12:    <%= f.hidden_field :avatar_cache %>
    13:  </p>
  app/views/users/show.html.erb:10:in   
`_app_views_users_show_html_erb__498619941080127768_2168209880'
  app/controllers/users_controller.rb:18:in `show'

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

Ответы [ 2 ]

1 голос
/ 22 марта 2012

Откройте загрузчик и убедитесь, что у вас есть следующее:

def root
  Rails.root.join 'public/'
end

def store_dir
  "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end

Возможно, это решит проблему.

0 голосов
/ 13 марта 2012

Не знаю, поможет ли это; возможно, отсутствует что-то, что вы делаете в контроллере.

Вы загружаете на: avatar, но затем ссылаетесь на avatar_url, чтобы получить его.

Шахта - это avatar.url.to_s

<%= image_tag user.avatar.url.to_s, {:height => 30} %>
...