Skip to content

Instantly share code, notes, and snippets.

@beck03076
Created July 28, 2013 16:07
Show Gist options
  • Save beck03076/6099101 to your computer and use it in GitHub Desktop.
Save beck03076/6099101 to your computer and use it in GitHub Desktop.
class CitiesDatatable
delegate :image_tag,:edit_city_path,:params, :h, :link_to, :number_to_currency, to: :@view
def initialize(view)
@view = view
end
def as_json(options = {})
{
sEcho: params[:sEcho].to_i,
iTotalRecords: City.count,
iTotalDisplayRecords: cities.total_entries,
aaData: data
}
end
private
def data
cities.map do |city|
[ "<div class='main-name'>" +
link_to(city.name,city,{:remote => :true}) +
"</div>",
(city.country.name if !city.country.nil?),
(city.desc if !city.desc.nil?),
"<div class = 'tools dn'> <ul>" +
["<li>" +
link_to(image_tag("/assets/icons/view.png"),city,{:remote =>:true}) +
"</li>", "<li>" +
link_to(image_tag("/assets/icons/edit.png"), edit_city_path(city) ,{:remote =>:true}) +
"</li>", "<li>" +
link_to(image_tag("/assets/icons/delete.png"),city,method: :delete, data: { confirm: 'Are you sure?' }) +
"</li>"].join(" ") +
"</ul> </div>"
]
end
end
def cities
@cities ||= fetch_cities
end
def fetch_cities
cities = City.order("#{sort_column} #{sort_direction}")
cities = cities.page(page).per_page(per_page)
if params[:sSearch].present?
cities = cities.where("name like :search", search: "%#{params[:sSearch]}%")
end
cities
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 ]
columns[params[:iSortCol_1].to_i]
end
def sort_direction
params[:sSortDir_0] == "desc" ? "desc" : "asc"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment