【问题标题】:When using filepicker-rails, where should I define my avatar_url method within my rails app?使用 filepicker-rails 时,我应该在我的 rails 应用程序中的哪里定义我的 avatar_url 方法?
【发布时间】:2012-09-27 18:06:11
【问题描述】:

我已经安装了filepicker-rails gem,我可以将文件上传到filepicker.io 服务器。当我尝试为不同的用户配置文件显示图像时,出现错误:

undefined method 'avatar_url' for nil:NilClass

在我的用户目录下,在我的 show.html.erb 文件中:

<%= filepicker_image_tag @user.avatar_url, w: 160, h: 160, fit: 'clip' %>

我的 User.rb 文件下有以下内容:

def avatar_url(user)
  user.avatar_url
end

任何想法为什么这不起作用?

【问题讨论】:

    标签: ruby-on-rails-3.1 rubygems filepicker.io


    【解决方案1】:

    基本上,您的数据库中需要一个名为avatar_url 的列。编写一个迁移,它将为您提供一个 avatar_url 列,就像一个常规字符串列一样。由于您使用的是 Rails,ActiveRecord 将为您提供 avatar_url 方法。

    编辑:在您的控制器中,您可能没有正确查找您的用户,这会导致在您的视图中对 NilClass 进行方法调用。

    【讨论】:

    • Shane,我已经将avatar_url 添加到迁移中。我得到同样的错误......
    • 啊,抱歉,我最初没有正确阅读此内容。 undefined method 'avatar_url' for nil:NilClass 表示您的@user 为空。因此,在您的控制器中,您要么没有正确查找 User,要么根本没有。本质上,您正在尝试在不存在的对象上调用方法。希望对您有所帮助。
    • 是的,在发布我的问题之前,我尝试使用:@user = User.find(params[:id]) 定义方法“显示”。不幸的是,这给了我以下错误:Couldn't find User without an ID
    • 啊,那你就得贴更多代码了,可能是查看代码。无论出于何种原因,params[:id] 似乎是空的,所以它试图在没有 id 的情况下进行查找。
    • Shane,实际上这正是问题所在。我的“表演”方法有@user = User.find(params[:id])。但是,当我将其更改为:@user = User.find(session[:user_id]) 时,它起作用了!
    猜你喜欢
    • 2015-02-15
    • 2015-08-26
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 2017-01-06
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多