1

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

我有以下控制器:

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 表达式吗?创建或更新后未命中的原因可能是什么?

4

1 回答 1

0

当 Rails 中的某些事情没有像您认为的那样在控制器中发生时,请记住检查:

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

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

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

于 2013-06-16T17:53:24.617 回答