无法创建我的@current_user

时间:2014-10-21 07:55:09

标签: ruby-on-rails ruby

我是铁轨上的红宝石新人,有人帮帮我吗?
我无法看到@ current_user.username

*这是我的session_controller

class SessionController < ApplicationController
  def new
  end
  def create
    user = User.find_by_username(params[:session][:username])
    if user
      login user
      redirect_to user
    else
      render 'new'
    end
  end
  def sucess
  end
  def error
  end   
end

* Sessionhelper

module SessionHelper
  def login(user)
    session[:user_id] = user.id
  end
  def current_user
    @current_user ||= User.find(session[:user_id])
  end
end

*控制器

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  include SessionHelper
end

*我的模特用户

class User < ActiveRecord::Base
  attr_accessible :pass, :username
  validates :username, :pass, :presence => true
  validates :username, :pass, :length => { :minimum => 4 }
  validates :username, :uniqueness => true

*应用程序布局

  <title>Sessions</title>
  <%= stylesheet_link_tag    "application", :media => "all" %>
  <%= javascript_include_tag "application" %>
  <%= csrf_meta_tags %>
</head>
<body>
<% if @current_user %>
    Hello <%= @current_user.username %>
    <% end %>
<%= yield %>

</body>

*和我的登录视图

 <%= form_for(:session, url: login_path) do |f| %>   
              <%= f.label :username %>
              <%= f.text_field :username %>

              <%= f.label :pass %>
              <%= f.password_field :pass %>

              <%= f.submit "Log in" %>
    <% end %>

请帮帮我:)。

1 个答案:

答案 0 :(得分:1)

你有帮手的方法:

def current_user
    @current_user ||= User.find(session[:user_id])
end

所以在模板中你应该使用current_user而不是@current_user

所以,它应该是:

<body>
    <% if current_user %>
        Hello <%= current_user.username %>
    <% end %>
    <%= yield %>

</body>

<强>更新

但最好在ApplicationController中创建方法:

def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user

因为在这种情况下,current_user也可以从控制器和模板中调用。