如何使用## _ helper文件中声明的变量?

时间:2013-03-12 02:52:00

标签: ruby-on-rails ruby-on-rails-3

我正在尝试在我的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?谢谢你们。

1 个答案:

答案 0 :(得分:0)

在我的评论之后,您的SessionsHelper看起来类似to that of The Rails Tutorial。鉴于此,我认为您的current_usercurrent_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