Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .rspec
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
--color
121 changes: 116 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,132 @@ Datatables is a nifty jquery plugin that adds the ability to paginate, sort, and

## Installation

Add this line to your application's Gemfile:
Add these lines to your application's Gemfile:

gem 'jquery-datatables-rails'
gem 'ajax-datatables-rails'

And then execute:

$ bundle

Or install it yourself as:
## Usage
*The following examples assume that we are setting up ajax-datatables-rails for an index of users from a `User` model*
### Model
Run the following command:

$ gem install ajax-datatables-rails
$ rails generate ajaxdatatable User

## Usage
This will generate a file named `users_datatable.rb` in `app/datatables`. Open the file and customize in the functions as directed by the comments

#### Initializer
```ruby
def initialize(view)
@model_name = User
@columns = # insert array of column names here
@searchable_columns = #insert array of columns that will be searched
super(view)
end
```

* For `@columns`, assign an array of the database columns that correspond to the columns in our view table. For example `[users.f_name, users.l_name, users.bio]`. This array is used for sorting by various columns

* For `@searchable_columns`, assign an array of the database columns that you want searchable by datatables. For example `[users.f_name, users.l_name]`

This gives us:
```ruby
def initialize(view)
@model_name = User
@columns = [users.f_name, users.l_name, users.bio]
@searchable_columns = [users.f_name, users.l_name]
super(view)
end
```

#### Data
```ruby
def data
users.map do |user|
[
# comma separated list of the values for each cell of a table row
]
end
end
```

This method builds a 2d array that is used by datatables to construct the html table. Insert the values you want on each column.

```ruby
def data
users.map do |user|
[
user.f_name,
user.l_name,
user.bio
]
end
end
```

#### Get Raw Records
```ruby
def get_raw_records
# insert query here
end
```

This is where your query goes.

```ruby
def get_raw_records
User.all
end
```

### Controller
Set up the controller to respond to JSON

```ruby
def index
respond_to do |format|
format.html
format.json { render json: UsersDatatable.new(view_context) }
end
end
```

### View
* Set up an html `<table>` with a `<thead>` and `<tbody>`
* Add in your table headers if desired
* Don't add any rows to the body of the table, datatables does this automatically
* Add a data attribute to the `<table>` tag with the url of the JSON feed

The resulting view may look like this:

```erb
<table id="user-table", data-source="<%= users_path(format: :json) %>">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Brief Bio</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
```

### Javascript
Finally, the javascript to tie this all together. In the appropriate `js.coffee` file:

TODO: Write usage instructions here
```coffeescript
$ ->
$('#users-table').dataTable
bProcessing: true
bServerSide: true
sAjaxSource: $('#users-table').data('source')
```

## Contributing

Expand Down
4 changes: 4 additions & 0 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
#!/usr/bin/env rake
require "bundler/gem_tasks"
require 'rspec/core/rake_task'

RSpec::Core::RakeTask.new(:spec)
task default: :spec
2 changes: 2 additions & 0 deletions ajax-datatables-rails.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,6 @@ Gem::Specification.new do |gem|
gem.name = "ajax-datatables-rails"
gem.require_paths = ["lib"]
gem.version = AjaxDatatablesRails::VERSION

gem.add_development_dependency "rspec"
end
7 changes: 7 additions & 0 deletions spec/ajax-datatables-rails/ajax_datatables_rails_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
require 'spec_helper'

describe AjaxDatatablesRails do
describe "as_json" do
it "should return the correct json feed"
end
end
1 change: 1 addition & 0 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require 'ajax-datatables-rails'