我有一个问题:
undefined method `avatar_url' for #<User:0x000000040783a8>
控制器:
class ApplicationController < ActionController::Base
protect_from_forgery
helper :all
helper_method :avatar_url
protected
def avatar_url(user)
if user.avatar_url.present?
user.avatar_url
else
default_url = "#{root_url}images/guest.png"
gravatar_id = Digest::MD5.hexdigest(user.email.downcase)
"http://gravatar.com/avatar/#{gravatar_id}.png?s=48&d=#{CGI.escape(default_url)}"
end
end
end
在视图中:
...
<%for user in @users %>
<%= image_tag avatar_url(user) %>, username: <%= user.username %>, e-mail: <%= user.email %>
<% end %>
...
有人帮助我吗?
答案 0 :(得分:5)
密钥是错误消息:
undefined method `avatar_url' for #<User:0x000000040783a8>
错误不是因为辅助方法未定义:错误消息表明它是User
类中缺少的方法。 ApplicationController
中定义的方法尝试:
def avatar_url(user)
if user.avatar_url.present?
user.avatar_url
#...
您需要确保User
类具有avatar_url
实例方法。
答案 1 :(得分:-1)
最好从文件ApplicationController中删除“helper_method:avatar_url”行。
请在此处查看更多详情。 "undefined method" when calling helper method from controller in Rails
因为,您应该在任何其他模块/帮助文件中定义辅助方法xxx(helper_method:xxx)。因此,行助手:所有自动包含所有助手文件,然后只能使用行helper_method:xxx。这很有道理。
无需将ApplicationController方法定义为辅助方法。您可以在任何控制器或视图中调用这些方法,只需使用avatar_url()。