2014-05-25 50 views
1

我在友誼控制器中的通用CRUD外部有一個自定義方法,叫做請求。我的問題是,我已將before_filter :require_auth設置爲在我的FriendshipsController中的所有方法之前運行。before_filter未被稱爲rails?

除請求方法外,它工作正常。

(這讓我覺得這有什麼用它做是出正常的CRUD的?)

當我調用請求的方法現在跳過:require_auth直去這是給我的錯誤請求方法因爲我在:require_auth中定義了一些我在請求方法中需要的變量。

這裏是我的FriendshipsController

class FriendshipsController < ApplicationController 

    skip_before_filter :verify_authenticity_token, :only => [:create] 

    before_filter :require_auth 

    def create 
    @friendship = Friendship.new(user_id: params[:user_id], friend_id: params[:friend_id], status: params[:status]) 

    if @friendship.save 
     render :status => 200, :json => {:message => "Friendship Created"} 
    else 
     render :status => 500, :json => { :message => "Problem creating friendship" } 
    end 
    end 

    def request 
    # friendID = params[:friend_id] 
    # userID = @currentuser.id 
    binding.pry 
    @userid = @currentuser.id 
    @friendid = params[:friend_id] 
    unless (@userid == @friendid || Friendship.exists?(user_id: @userid,friend_id: @friendid)) 
     create(:user_id => userID, :friend_id => friendID, :status => 'pending') 
     create(:user_id => friendID, :friend_id => userID, :status => 'requested') 
    end 
    end 

end 

這是我ApplicationController,我定義require_auth

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    # protect_from_forgery with: :null_session 

    def require_auth 
    binding.pry 
    auth_token = request.headers["HTTP_AUTH_TOKEN"] 
    @user = User.find_by_auth_token(auth_token) 
    if @user.auth_token 
     @currentuser = @user 
    else 
     render :status => 401, :json => {:error => "Requires authorization"} 
     return false 
    end 
    end 

end 
+1

什麼Rails版本?導致在Rails 4中它調用'before_action'。但它應該是另一個錯誤。 – zishe

+3

@zishe我相信'before_filter'仍然可以在Rails 4中使用,但不推薦使用。 –

+8

考慮更改動作的名稱。 'request'通常是您可以調用以獲取有關當前請求的信息的對象的名稱。 –

回答

1

克里斯·彼得斯是正確的意見。我的問題是rails已經定義了請求。我簡單地將方法名稱更改爲其他名稱,並且可以正常工作。

謝謝。