我很茫然。如果它存在,则下面应该调用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
答案 0 :(得分:2)
这是因为你在respond_to的末尾忘记了问号(?)。正确的方法是respond_to?。不带问号的respond_to是rails控制器的一种方法,它将检查给定参数的MIME类型,以便它可以使用正确的MIME类型标题进行响应。