This Rails plugin allows you to add jQuery datagrids into your applications.
Following features are supported :
-
Ajax enabled
-
Sorting
-
Pagination
-
Search
-
CRUD operations (add, edit, delete)
-
Multi-selection (checkboxes)
-
Master-details
-
Themes
-
And more …
Documentation & live demo are available at www.2dconcept.com/jquery-grid-rails-plugin A sample app is available here : github.com/ahe/jqgrid_demo_app
You can now generate a grid using a command like this one :
$ ./script/generate jqgrid user id pseudo email firstname
Copyright © 2009 Anthony Heukmes, released under the MIT license
My Rails blog : 2dconcept.com My Twitter account : twitter.com/2dc
Restful Buttons Example
Add error/validation notification helper method to ApplicationController (or specific controllers). You can then call jqgrid_error_messages_for(@widget) from your controllers.
class ApplicationController < ActionController::Base …
include JqgridNotifiable
… end
Example create method from controller - Note the type json needed for :custom_buttons helper
def create
respond_to do |type|
type.html {
params[:widget] ||= {}
@widget = Widget.new(params[:widget])
if @widget.save
flash[:notice] = "Successfully created widget."
redirect_to @widget
else
render :action => 'new'
end
}
type.json {
widget_params = {
:description => params[:description],
:amount => params[:amount],
}
@widget=Widget.new(widget_params)
if @widget.save
render :json => [true,""] # use this syntax to pass back messages to jqgrid
else
#Used to pass error/validation messages to a modal form. Need to include JqgridNotifiable in ApplicationController.
jqgrid_error_messages_for(@widget)
end
}
end
end
View <%= jqgrid_restful_add_edit_delete_buttons( :name => “widgets”, :div_object => “widgets”, :base_path => widgets_path ) %>
<%= jqgrid(“Widgets for this Plan”, “widgets”, client_plan_widgets_path(@client, @plan), [ { :field => “id”, :label => “ID”, :resizable => false, :hidden => true }, { :field => “description”, :label => “Description” }, { :field => “amount”, :label => “Amount”, :formatter => ‘currency’, :formatoptions => { :decimalSeparator=>“.”, :thousandsSeparator=>“,”, :decimalPlaces=>0, :prefix=>“$”} } ], { :add => false, :edit => false, :inline_edit => false, :delete => false, :search => false, :width => 650, :custom_buttons => [ {
:function_name => 'addWidget',
:caption => nil,
:title => "Add Widget",
:icon => "ui-icon-plusthick",
},
{
:function_name => 'editWidget',
:caption => nil,
:title => "Edit Selected Widget",
:icon => "ui-icon-pencil",
},
{
:function_name => 'deleteWidget',
:caption => nil,
:title => "Delete Selected Widget",
:icon => "ui-icon-trash",
}
] } ) %>
Or, if you want to override the default add/edit/delete functions with your own
<%= jqgrid_restful_add_edit_delete_buttons( :name => “widgets”, :div_object => “widgets”, :base_path => widgets_path, :add_function => %Q(document.location=‘#{ new_widget_path }’;), :edit_function => %Q(document.location=‘#{ widgets_path }/’ + id.toString() + ‘/edit’;) ) %>