Carrierwave Gem:使用头像创建用户后,'无法将nil转换为字符串'

时间:2012-03-12 18:29:42

标签: ruby-on-rails string carrierwave null avatar

我会说当我第一次启动运行波形时,除了头像的大小缩放外,一切都工作得很好。

所以现在在我尝试缩放之后,一切都变成了地狱。我卸载了gem,进行了迁移以从用户中删除头像,然后进行了另一次迁移添加。

仍然是同样的错误。注意我正在做rails g上传者头像,而不是图像。除了添加

之外,我还没有触及avatar_uploader.rb文件
require 'carrierwave/orm/activerecord'

在最上面。

所以,真正奇怪的是:

当我进入控制台时,并执行User.last

1.9.3p0:001> User.last   用户负载(0.3ms)SELECT“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 个答案:

答案 0 :(得分:1)

打开您的上传器并确保您拥有以下内容:

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

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

这可能会解决问题。

答案 1 :(得分:0)

不知道这是否有帮助;可能会遗漏你在控制器中所做的事情。

您上传到:avatar,但随后引用avatar_url来检索它。

我的是avatar.url.to_s

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