参数不在Rails控制器方法中,但在过滤器和应用程序控制器

时间:2015-10-09 15:46:11

标签: ruby-on-rails ruby-on-rails-3 controller

我的控制器看起来像这样:

class ApplicationController < ActionController::Base
  before_filter :print_params

  def print_params
   p params
  end
end

class CommandsController < ApplicationController
  before_filter :print_params

  def print_params
   p params
  end
end

class FidelityBondRenewalsController < CommandsController
  before_filter :print_params

  def print_params
   p params
  end

  def renew_with_changes 
     p params
  end
end

当我运行我的黄瓜测试时,我看到了整个打印参数,除非我最终点击了renew_with_changes方法然后我的参数消失了。我在这个控制器中有其他方法,它没有发生。我在代码库中搜索了其他方法和这个方法之间的任何差异,但找不到任何东西。

如果我在FidelityBondRenewalsController的print_params方法中放置binding.pry并反复点击,我最终会:

    16: def process_action(*args)
    17:   run_callbacks(:process_action, action_name) do
 => 18:     super
    19:   end
    20: end

有params。如果我接下来键入,那么我转到我的renew_with_changes方法,并且参数不见了。

我可以尝试尝试跟踪此情况?这是一个Rails3.2应用程序,如果有用的话,安装的强参数gem更像Rails4。

路线信息:

  resources :fidelity_bond_renewals do
    member do
      .
      .
      .
      put :renew_with_changes
    end 
  end 

1 个答案:

答案 0 :(得分:0)

问题有两个:

  1. 无论出于何种原因,Binding.pry无法读取参数。我还没弄明白为什么。我可以p params看到它们。我可以在那之后做binding.pry并尝试p params并且他们不会打印。这与我上面描述的行为不同。唯一的变化是我今天开车而且我的配对没有。如果我们可以重现它们,我们可能需要解决这些差异。如果他遇到差异,我会回复此事。

  2. params本身被一些代码操纵,这意味着我需要以不同方式访问密钥。一旦弄明白,一切都开始起作用了。