Rails 4 before_action被调用,好像在Mime中一样

时间:2015-07-25 17:04:29

标签: ruby-on-rails ruby-on-rails-4

我很茫然。如果它存在,则下面应该调用api_authenticate_data_check,但它失败并出现以下错误:

NameError (uninitialized constant Mime::API_AUTHENTICATE_DATA_CHECK):
  app/controllers/application_controller.rb:48:in `api_authenticate'

为什么Rails认为我们在Mime对象之内?为什么同样的问题不会出现在send正上方?!我的控制器都没有做任何与Mime相关的事情 - 不管怎么说都没有。

class ApplicationController < ActionController::Base
  before_action :api_authenticate

  def api_authenticate
    model_name = controller_name[0...-1]
    params_name = "#{model_name}_params".to_sym

    # below works
    p = (respond_to?(params_name) ? send(params_name) : params)[model_name]

    # below does *not* work (line 48)
    valid_data = !respond_to(:api_authenticate_data_check) || send(:api_authenticate_data_check, p)
    # ...
  end
end

1 个答案:

答案 0 :(得分:2)

这是因为你在respond_to的末尾忘记了问号(?)。正确的方法是respond_to?。不带问号的respond_to是rails控制器的一种方法,它将检查给定参数的MIME类型,以便它可以使用正确的MIME类型标题进行响应。