为什么在控制器上的after_filter中使用lambda表达式

时间:2013-06-16 17:44:11

标签: ruby-on-rails

我继承了这段代码,但无法理解这一部分:

我有以下控制器:

class MenuCategoriesController < ApplicationController
  load_and_authorize_resource

  after_filter lambda { |controller| controller.update_other_locals_for(@menu_category) }, :only => [:create, :update]

  # GET /menu_categories
  # GET /menu_categories.json
  def index
...

在application_controller中是:

def update_other_locals_for(item)
    available_locals = item.menu.shop.chosen_locals
...

通常在更新或创建项目时应该更新update_other_locals_for。我设置了一个断点,这似乎永远不会发生。这需要lambda表达式吗?可能是因为它在创建或更新后没有被击中的原因是什么?

1 个答案:

答案 0 :(得分:0)

当Rails中的某些内容没有像您认为应该在控制器中那样发生时,请记得检查:

  • 您的路线已正确定义
  • 你的能力是正确的

首先,您可以检查是否点击了MenuCategoriesController的创建和更新操作中设置的断点。如果没有调用您的操作,那么您当然不会看到after_filter。

如果您怀疑lambda,请尝试用方法替换它,并验证该方法是否被调用。