我正在尝试在我的Route.rb
文件中执行之前的保存定义。 (@ current_user.email导致错误)
class Route < ActiveRecord::Base
before_save { |route| route.created_by = @current_user.email }
end
但是我收到了这个错误,
undefined method `email' for nil:NilClass
但我可以在我的_header.html.erb
中使用它就好了:
<a class="btn btn-primary dropdown-toggle" data-toggle="dropdown" href="#">
<%= @current_user.email %>
<span class="caret"></span>
@current_user
在我的sessions_helper
中描述如下:
module SessionsHelper
def sign_in(user)
cookies.permanent[:remember_token] = user.remember_token
current_user = user
end
def signed_in?
!current_user.nil?
end
def current_user=(user)
@current_user
end
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
def current_user?(user)
user == current_user
end
def sign_out
current_user = nil
cookies.delete(:remember_token)
end
end
为什么在没有收到错误的情况下我无法执行此before_save
?谢谢你们。
答案 0 :(得分:0)
在我的评论之后,您的SessionsHelper
看起来类似to that of The Rails Tutorial。鉴于此,我认为您的current_user
和current_user=
方法存在一些问题,因为它们似乎正在做相反的事情。它们应该是:
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
def current_user=(user)
@current_user = user
end
修改强>
The model should not know about controller or helper methods,因此您可能希望在保存对象之前在相关控制器中的某处设置@route.created_by = current_user.email
。