1

コントローラーに新しいメソッドを追加する際に問題が発生しました。詳細は次のとおりです。

match_controller.rb

def index
  @matches = Match.all    
  render rabl: @matches
end

def current
  @matches = Match.find_by_sql("SELECT * FROM `TEST`.`matches` where live=1;")    
  render rabl: @matches
end

ルート.rb

resources :matches, defaults: {format: :json}, except: :edit do 
  collection do
    get :current
  end
end

current.json.rabl

collection @match
   attributes :id,:live

レーキルート

current_matches GET    /matches/current(.:format) matches#current {:format=>:json}
        matches GET    /matches(.:format)         matches#index {:format=>:json}
                POST   /matches(.:format)         matches#create {:format=>:json}
      new_match GET    /matches/new(.:format)     matches#new {:format=>:json}
          match GET    /matches/:id(.:format)     matches#show {:format=>:json}
                PUT    /matches/:id(.:format)     matches#update {:format=>:json}
                DELETE /matches/:id(.:format)     matches#destroy {:format=>:json}

ログのエラー

NameError (undefined local variable or method `flash' for #<MatchesController:0x0000000d7b2368>):
app/controllers/application_controller.rb:6:in `block in <class:ApplicationController>'

アプリケーション.rb

class ApplicationController < ActionController::API
   include ActionController::MimeResponds
   include CanCan::ControllerAdditions

  rescue_from CanCan::AccessDenied do |exception|
    flash[:error] = exception.message
    puts exception.message
    redirect_to root_url
  end

  def log_exception(exception)
    logger.error(exception.message)
    logger.error(exception.backtrace.join("\n"))
  end
end

以前に別のアプリケーションでこれを行ったことがありますが、ここで機能しない理由はわかりません。

4

1 に答える 1

1

flashに直接渡されたブロック内ではアクセスできませんrescue_fromflashただし、例外ハンドラ メソッドの Symbol を渡すとアクセスできます。例えば:

class ApplicationController < ActionController::API
  rescue_from CanCan::AccessDenied, :with => :access_denied

  private

  def access_denied(exception)
    flash[:error] = exception.message
    redirect_to root_url
  end
end

詳細については、ActionController Rails ガイドのセクションを参照しrescue_fromてください。

于 2013-03-27T05:35:20.533 に答える