Oh, I hadn't read this email, so forget about my other answer! Thanks a lot for your tutorial, I just linked it from the repository's README: https://github.com/Hobo/hobo_data_tables
Warm regards, Ignacio El 01/11/13 16:14, William Wong escribió: > It took me a while to figure out how to put together a hobo datatable > with server side processing. It's based on railscasts #340. Just want to > share it here. > > 1. Install hobo datatables per > instruction http://hobocentral.net/api_plugins/hobo_data_tables > > 2. My model looks like this > > class Product < ActiveRecord::Base > > hobo_model # Don't put anything above this > > fields do > name :string > body :text > timestamps > end > .... > > 3. add below to views/products/index.dryml > > <index-page> > <collection: replace> > <data-table bJqueryUI fields="this,body,updated_at" > data-rapid='{"data-table":{"options":{"sPaginationType":"full_numbers","bProcessing":true,"bServerSide":true,"sAjaxSource":""},"event":{}}}' > /> > </collection:> > <bottom-page-nav: replace /> > </index-page> > > ** Not 100% sure whether there is a way to specify options without > overriding data-rapid, but this works. > ** <bottom-page-nav: replace /> is used to remove the bottom-page-nav > > 4. modify the controller to > > class ProductsController < ApplicationController > > hobo_model_controller > > auto_actions :all > > def index > hobo_index do > respond_to do |format| > format.html > format.json { render json: ProductsDatatable.new(view_context) } > end > end > end > end > > 5. Add a products_datatable.rb to app/datatables/ to create the json > response > > class ProductsDatatable > delegate :params, :h, :link_to, to: :@view > > def initialize(view) > @view = view > end > > def as_json(options = {}) > { > sEcho: params[:sEcho].to_i, > iTotalRecords: Product.count, > iTotalDisplayRecords: products.total_entries, > aaData: data > } > end > > private > > def data > products.map do |product| > [ > link_to(product.name, product), > h(product.body), > h(product.updated_at.strftime("%B %e, %Y")), > ] > end > end > > def products > @products ||= fetch_products > end > > def fetch_products > products = Product.order("#{sort_column} #{sort_direction}") > products = products.page(page).per_page(per_page) > if params[:sSearch].present? > products = products.where("name like :search or body like > :search", search: "%#{params[:sSearch]}%") > end > products > end > > def page > params[:iDisplayStart].to_i/per_page + 1 > end > > def per_page > params[:iDisplayLength].to_i > 0 ? params[:iDisplayLength].to_i : 10 > end > > def sort_column > columns = %w[name body updated_at] > columns[params[:iSortCol_0].to_i] > end > > def sort_direction > params[:sSortDir_0] == "desc" ? "desc" : "asc" > end > end > > That's it. Let me know if you have any questions. Enjoy. > > -- > You received this message because you are subscribed to the Google > Groups "Hobo Users" group. > To unsubscribe from this group and stop receiving emails from it, send > an email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/hobousers. > For more options, visit https://groups.google.com/groups/opt_out. -- Ignacio Huerta Arteche http://www.ihuerta.net Teléfono: 0034 645 70 77 35 Email realizado con software libre -- You received this message because you are subscribed to the Google Groups "Hobo Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/hobousers. For more options, visit https://groups.google.com/groups/opt_out.
