2

我们的应用程序使用Paloma gem来监督每个请求的 JavaScript 执行。这通常效果很好,直到您尝试进行仅标头响应。例如,这是我们控制器中更新操作的代码:

class EmployeesController < InternalController

  def update
    respond_to do |format|
      format.any do
        head :ok
      end
    end
  end

end

很简单。它不需要使用任何视图或模板来生成此响应。对?然后帕洛玛参与其中......而不是一个漂亮、简单的 HTTP 200 OK 我们得到一个ActionView::MissingTemplate异常,并带有以下错误消息和跟踪:

Missing partial paloma/callback_hook with {:locale=>[:en], :formats=>[:all], :handlers=>[:erb, :builder, :slim, :coffee, :haml, :rabl]}.
Searched in: * "/Users/<username>/Development/<app name>/app/views" * "/Users/<username>/.rvm/gems/ruby-1.9.3-p194/gems/jasminerice-0.0.10/app/views" * "/Users/<username>/.rvm/gems/ruby-1.9.3-p194/gems/paloma-2.0.1/app/views" * "/Users/<username>/.rvm/gems/ruby-1.9.3-p194/gems/kaminari-0.14.1/app/views" * "/Users/<username>/.rvm/gems/ruby-1.9.3-p194/gems/devise-2.2.3/app/views" * "/Users/<username>/.rvm/gems/ruby-1.9.3-p194/gems/paloma-2.0.1/app/views"
Backtrace:
  /Users/<username>/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.12/lib/action_view/path_set.rb:58:in `find'
  /Users/<username>/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.12/lib/action_view/lookup_context.rb:109:in `find'
  /Users/<username>/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.12/lib/action_view/renderer/partial_renderer.rb:339:in `find_template'
  /Users/<username>/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.12/lib/action_view/renderer/partial_renderer.rb:333:in `find_partial'
  /Users/<username>/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.12/lib/action_view/renderer/partial_renderer.rb:222:in `render'
  /Users/<username>/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.12/lib/action_view/renderer/renderer.rb:41:in `render_partial'
  /Users/<username>/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.12/lib/action_view/renderer/renderer.rb:15:in `render'
  /Users/<username>/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.12/lib/action_view/helpers/rendering_helper.rb:24:in `render'
  /Users/<username>/.rvm/gems/ruby-1.9.3-p194/gems/haml-4.0.0/lib/haml/helpers/action_view_mods.rb:12:in `render_with_haml'
  /Users/<username>/.rvm/gems/ruby-1.9.3-p194/gems/paloma-2.0.1/lib/paloma/action_controller_filters.rb:23:in `update_callback'
  ...
  (further lines snipped)

令人困惑的是,当我去查看已安装的 gem 时,它正在寻找的部分就在它的所有荣耀中,所以似乎没有任何理由说明 Rails 不应该能够找到它:

Maple:~ <username>$ ls -l /Users/<username>/.rvm/gems/ruby-1.9.3-p194/gems/paloma-2.0.1/app/views/paloma
total 8
-rw-rw-r--  1 <username>  staff  1323 Mar 11 09:10 _callback_hook.html.erb

对于返回 HTTP 状态为 200 以及响应正文的其他请求不会发生这种情况,它仅发生在通过 Railshead方法的仅标头响应中。

我是否在 Paloma gem 中发现了错误?还是 Rails 中的错误?或者有什么我应该调整以允许找到视图?为什么 Rails 首先要搜索视图以生成仅标题响应?任何人都可以提供的任何帮助或建议将不胜感激。

4

1 回答 1

1

如果您希望 Paloma 不在特定的 Rails 控制器操作中执行,您需要将 false 作为 Paloma 参数传递。

def edit
  @user = User.find params[:id]
  js false
end

https://github.com/kbparagua/paloma#preventing-paloma-execution

于 2015-02-04T06:36:11.597 回答