在我的Rails 3應用程序中,我正在重定向以在註冊過程中進行登錄。要註冊的步驟應該是:Rails 3 NoMethod錯誤 - 配置文件中的配置文件未定義方法#使用CanCan編輯
- 用戶創建用戶和簡介
- 在保存用戶,用戶登錄到應用程序,並重定向到配置文件#編輯(
/signup/join
) - 在保存配置文件,用戶被重定向到配置文件#秀(
/profiles/:id
)
我重新導向至/login
步驟1後,和我看到重定向後302錯誤。如果我註釋掉我在profiles_controller.rb
before_filter :authenticate
和重做上面,我不重定向出/signup/join
步驟,但我得到以下錯誤:
NoMethodError in ProfilesController#edit
undefined method `profile' for nil:NilClass
我指了指我Profiles#edit
行動的第一行:
def edit
@profile = user.profile
if @profile.higher_ed?
higher_ed = HigherEd.find_or_create_by_name(:name => @profile.higher_ed)
end
if @profile.employer?
employer = Employer.find_or_create_by_name(:name => @profile.employer)
end
render :layout => "join_form"
end
我一直試圖在我的應用程序中實現CanCan,所以我認爲這是原因。但是,我註釋了我的整個ability.rb
文件,問題依然存在。我很想弄清楚如何解決這個問題,而不用註釋掉before_filter
。所以如果有人有想法,我會非常感激。因爲我負責的康康舞這取決於current_user
,我會在我的application_controller.rb
與current_user
的定義開始:
protected
# Returns the currently logged in user or nil if there isn't one
def current_user
return unless session[:user_id]
@current_user ||= User.find_by_id(session[:user_id])
@current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]
end
# Make current_user available in templates as a helper
helper_method :current_user
這裏是我的users_controller.rb
:
class UsersController < ApplicationController
before_filter :authenticate, :only => [:edit, :update, :index]
layout "application"
def new
@user = User.new
@user.profile = Profile.new
if logged_in?
redirect_to current_user.profile
end
end
def create
@user = User.new(params[:user])
if @user.save
session[:user_id] = @user.id
redirect_to join_path, :notice => 'User successfully added.'
UserMailer.registration_confirmation(@user).deliver
else
render :action => 'new'
end
end
我profiles_controller.rb
:
class ProfilesController < ApplicationController
#before_filter :authenticate, :only => [:edit, :update]
helper_method :find_or_create_group
layout "application", :except => [:edit, :show]
def new
@profile = Profile.new(params[:profile])
end
def create
@profile = Profile.new(params[:profile])
if @profile.save
redirect_to @user.profile, :notice => 'User successfully added.'
else
render :new
end
if @profile.higher_ed?
HigherEd.find_or_create_by_name(:name => @profile.higher_ed)
end
if @profile.employer?
Employer.find_or_create_by_name(:name => @profile.employer)
end
if @profile.job_title?
JobTitle.find_or_create_by_name(:name => @profile.job_title)
end
if @profile.high_school?
HighSchool.find_or_create_by_name(:name => @profile.high_school)
end
end
def user
@user = current_user
end
def edit
@profile = user.profile
if @profile.higher_ed?
higher_ed = HigherEd.find_or_create_by_name(:name => @profile.higher_ed)
end
if @profile.employer?
employer = Employer.find_or_create_by_name(:name => @profile.employer)
end
render :layout => "join_form"
end
我的sessions_controller.rb
:
class SessionsController < ApplicationController
def new
end
def create
if user = User.authenticate(params[:email].downcase, params[:password])
session[:user_id] = user.id
cookies.permanent[:auth_token] = user.auth_token
if user.profile.higher_ed?
redirect_to user.profile, :notice => "Logged in successfully"
else
redirect_to join_path, :notice => "Logged in successfully"
end
else
flash.now[:alert] = "Invalid login/password. Try again!"
render :action => 'new'
end
end
def destroy
reset_session
cookies.delete(:auth_token)
redirect_to root_path, :notice => "You successfully logged out"
end
end
我ability.rb
的康康舞:
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new guest user
if user.role? :admin
can :manage, :all
else
can :manage, :all
end
end
end
我routes.rb
:
match "/signup/join" => "profiles#edit", :as => 'join'
我試圖將其更改爲current_user,但我認爲current_user是問題。一旦我重新開始工作。 – tvalent2 2012-02-24 04:52:24