我是铁轨上的红宝石新人,有人帮帮我吗?
我无法看到@ 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 %>
请帮帮我:)。
答案 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
也可以从控制器和模板中调用。