2013-10-03 32 views
0

我想設置一個變量在我的before_filter,但總是得到錯誤「未定義的局部變量或方法‘問題’爲AnswersController」:的before_filter不調用方法,設置本地變量

class AnswersController < ApplicationController 
     before_filter :get_question 

     def create 
      @answer = question.answers.new(params[:answer]) 
      @answer.user = current_user 
      @answer.save 
      flash[:notice] = 'Answer posted successfully.' 
      redirect_to request.referer 
     end 

      def get_question 
       question = Question.find(params[:question_id]) 
      end 
    end 

謝謝非常!

+0

當我將任務分配到'創建'動作時,代碼工作正常... – erdostom

回答

6

您需要使用@符號將其設爲實例變量。此外,您可能需要考慮將其轉化爲私人方法(見下文),因爲這很可能不是公共行爲。

class AnswersController < ApplicationController 
    before_filter :get_question 

    def create 
     @answer = @question.answers.new(params[:answer]) 
     @answer.user = current_user 
     @answer.save 
     flash[:notice] = 'Answer posted successfully.' 
     redirect_to request.referer 
    end 

    private 

    def get_question 
     @question = Question.find(params[:question_id]) 
    end 
end 
+0

謝謝,解決了它! – erdostom

+1

也許你還希望在過濾器僅用於創建動作之前指定它:'before_filter:get_question,只有:: create'。 – peresleguine

+1

@peresleguine,我沒有包含這個建議,因爲我認爲他們很可能只發布了一個部分控制器,並且還有其他的CRUD操作。 – kobaltz