Skip to content

Commit

Permalink
Merge pull request jbox-web#6 from JoelQ/generators
Browse files Browse the repository at this point in the history
Generators
  • Loading branch information
Joel Quenneville committed Apr 30, 2012
2 parents c02beb2 + 853d898 commit 9835efa
Show file tree
Hide file tree
Showing 6 changed files with 131 additions and 5 deletions.
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'

0 comments on commit 9835efa

Please sign in to comment.