完成Michael Hart的導軌教程後,一個簡單的應用程序,我自己的嘗試。嘗試創建用戶會話 - >沒有路由匹配{:action =>「show」,:controller =>「users」,:id => nil}
我設法創建用戶資源,現在正在嘗試創建會話資源,以便跟蹤某人何時登錄。我遇到了一些非常古怪的結果。
1)我試圖顯示不同的菜單選項,當有人登錄時,以及有人註銷時。它的工作原理,除了它與我預期的方式相反!即當我寫
<ul class="nav pull-right">
<% if signed_in? %>
#menu for registered users
<% else %>
#menu for unregistered users
<% end %>
</ul>
當我登錄,未註冊用戶的#menu顯示出來,當我註銷,註冊用戶的#menu顯示出來。
2)我也試圖創建一個鏈接到用戶的管理頁面,這基本上是用戶的ID頁面。
我把這個作爲下面的鏈接代碼
<%= link_to "Admin", user_path(current_user) %>
,並得到了錯誤
沒有路由匹配{:動作=> 「秀」,:控制器=> 「用戶」 ,:id => nil}
這讓我覺得我在會話助手中定義的current_user沒有被保存,但比我想象的要多,但我不知道爲什麼。
下面是我對 用戶模型
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation
has_secure_password
before_save { |user| user.email = email.downcase }
before_save :create_remember_token
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
validates :password, presence: true, length: { minimum: 6 }
validates :password_confirmation, presence: true
private
def create_remember_token
self.remember_token = SecureRandom.urlsafe_base64
end
end
會話控制器
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by_email(params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
sign_in user
redirect_to user
else
flash.now[:error] = 'Invalid Email/Password Combination' #Not quite right;
render 'new'
end
end
末碼
SessionsHelper
module SessionsHelper
def sign_in(user)
cookies.permanent[:remember_token] = user.remember_token
self.current_user = user
end
def signed_in?
!current_user.nil?
end
def current_user=(user)
@current_user = user
end
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
end
的ApplicationController
class ApplicationController < ActionController::Base
protect_from_forgery
include SessionsHelper
end
的思考?
Your current_user is nil。檢查你的current_user爲什麼爲空。可能會話變量沒有設置在登錄 –
Hi Mohit,感謝您的評論 >可能會話變量未設置登錄 我該如何檢查? –
在你的create方法中拋出一個調試器,並查看'session'變量是否可用。 –