rails中jqGrid数据的自定义响应程序

时间:2012-01-30 22:53:18

标签: ruby-on-rails ruby-on-rails-3.1

我觉得这很容易。定义一个'to_grid'响应器模块,包含它以便在适当的位置使用,让jqgrid使用像'/client.grid'这样的网址进行交互,并且能够与html响应器共享休息动作。我查看了一些jqGrid宝石的选择,但没有看到任何在最近添加的代码,rails 3.1 compatable,gem不是插件以及完整REST访问的最佳位置。

但显然我不太了解响应者,或者它是一种完全不合适的策略选择。

jqGrid是一个基于JQuery的数据网格,它使用JSON与服务器通信。我的策略是这样的......

#Gemfile
gem 'kaminari'
gem 'responder'
gem 'inherited_resources'

#config/initializers/mime_types.rb
Mime::Type.register "application/json", :grid

#lib/application_responder.rb
require 'grid_responder'
class ApplicationResponder < ActionController::Responder
  include Responders::GridResponder
end

#lib/grid_responder.rb
module Responders
  module GridResponder
    extend ActiveSupport::Concern
    module InstanceMethods
      def to_grid
        #Only pagination included at this time.
        if get? && resource.is_a?(ActiveRecord::Relation)
          total = resource.klass.count
          page, rows = controller.params[:page], controller.params[:rows]
          paginated = resource.page(page).per(rows)
          output = { total: (total / rows) + 1,
                     page: page,
                     records: total,
                     rows: resource }
          render json: output.to_json
        end
      end
    end
  end
end

#app/controllers/application_controller.rb
require "application_responder"
class ApplicationController < ActionController::Base
  self.responder = ApplicationResponder
  respond_to :html, :json, :grid
end

#app/controllers/client_controller.rb
class ClientController < InheritedResources::Base
end

但是调用/client.grid正在补偿没有找到模板。我真的没想到需要一个模板。我开始怀疑这种策略是否值得追求。我有大约十几个我需要网格的模型,在12个不同的控制器中做同样的事情似乎不太干。

问题:这个策略是值得追求的还是更容易或更惯用的尝试。

奖金问题:指向我可以阅读并用作模型的工作休息/响应代码的指针。

谢谢!

1 个答案:

答案 0 :(得分:0)

这里有许多潜在的问题:

我认为这意味着你的条件是返回false并且渲染没有被调用,所以它正在寻找一个默认渲染的视图模板。您是否检查过以确保resource.is_a?(ActiveRecord :: Relation)为您的用例返回true? Inherited Resources不为资源返回ActiveRecord :: Relation - 它应该返回一个ActiveRecord :: Base实例。

此外,如果您不需要

,则自动加载路径中是否为lib
require Rails.root.join("lib/application_responder")

另外,你能否确认调用了to_grid方法?

我建议使用pry:https://github.com/pry/pry来反思这里发生的事情。