Gem Ransack
Ransack Ransack là một gem được viết lại từ gem MetaSearch được dùng để tìm kiếm dữ liệu. Nó hỗ trợ nhiều tính năng tương tự như MetaSearch nhưng khác nhau khá nhiều so với MetaSearch trong cách thức thực hiện tìm kiếm, và tính tương thích không phải là mục tiêu thiết kế của nó. Trước tiên các ...
Ransack
Ransack là một gem được viết lại từ gem MetaSearch được dùng để tìm kiếm dữ liệu. Nó hỗ trợ nhiều tính năng tương tự như MetaSearch nhưng khác nhau khá nhiều so với MetaSearch trong cách thức thực hiện tìm kiếm, và tính tương thích không phải là mục tiêu thiết kế của nó.
Trước tiên các bạn sẽ cài đặt gem simple_form'
gem 'simple_form'
Cài đặt:
bundle install rails generate simple_form:install
Các bạn có thể cài thêm Simple Form Bootstrap
rails generate simple_form:install --bootstrap
Cài đặt gem "ransack"
gem "ransack"
Khi sử dung gem "ransack" nó sẽ hổ trợ tìm kiếm, sắp xếp, ... Tìm kiếm theo vd: name: name_cont, age_cont
<%= f.text_field :name_cont, placeholder: "enter name", class: "form-control" %> <%= f.text_field :age_cont, placeholder: "enter age", class: "form-control" %>
Tìm kiếm theo nhiều trường vd: name_or_age_or_email_cont
<%= f.text_field :name_or_age_or_email_cont, placeholder: "enter name or age or email", class: "form-control" %>
Tìm kiếm theo mốc thời gian vd: :created_at_gteq và created_at_ltor
<%= f.date_field :created_at_gteq, placeholder: create_from, class: "form-control" %> <%= f.date_field :created_at_lteq, placeholder: "create to, class: "form-control" %>
Sắp xếp theo các trường:
<%= sort_link @search, :name, t("name") %>
db
class CreateUsers < ActiveRecord::Migration[5.0] def change create_table :users do |t| t.string :name t.string :password t.string :email t.integer :age t.string :avatar t.timestamps end end end
controller
def index @search = User.ransack params[:q] @uers = @search.result end
view
ruby <%= search_form_for @search, class: "col-md-12" do |f| %> <div class="form-group col-md-2"> <%= f.text_field :name_cont, placeholder: "enter name", class: "form-control" %> </div> <div class="form-group col-md-2"> <%= f.submit "search", class: "btn btn-primary" %> <ont <% end %> <table class="table table-hover"> <thead> <tr> <th> <%= sort_link @search, :name, t("name") %> </th> <th> <%= sort_link @search, :age, t("age") %> </th> </tr> </thead> <tbody> <% @users .each do |user| %> <tr> <td> <%= user.name %> </td> <td> <%=user.age %> </td> </tr> <% end %> </tbody> </table>
Các bạn củng có thể viết 1 đoạn javascript để tìm kiếm : Chỉ cần truyền id_form_search, vd: Search_ransack('#user_search')
javascript function Search_ransack(id_form_search){ $(document).on('keyup', id_form_search, function() { $.get($(id_form_search).attr('action'), $(id_form_search).serialize(), null, 'script'); return false; }); }
Tài liệu tam khảo: https://github.com/activerecord-hackery/ransack