Sử dụng ransack để search trong rails
RubyOnRails
39
Rails
30
Male avatar

Tri Vo Van (VN) viết ngày 16/11/2016

Chúng ta có một số bất cập khi tự create 1 method search cho App rails. Vậy muốn xử lý search được đơn giản hơn ta nên dùng gem ransack.

Bài viết này tôi sẽ nói về cách dùng gem 'ransack' để search trong index:

I. Install gem:

gem 'ransack'

II. Cách dùng:
Ransack có thể sử dụng với 1 trong 2 chế độ: đơn giản hoặc phức tạp.

a. In controller:

def index
    # cái này dùng để search
    @q = Person.ransack(params[:q])
    # cái này dùng để sort
    @search.sorts = 'name asc' if @search.sorts.empty?

    #kết quả
    @person = @q.result(distinct: true)
end

Note: Bạn có thể dùng phân trang hoặc nối nhiều bảng (relationship)

def index
     # cái này dùng để search 
    @q = Person.ransack(params[:q])

     # cái này dùng để sort
     @search.sorts = ['name asc', 'created_at desc'] if @search.sorts.empty?

    #kết quả
    @people = @q.result.includes(:articles).page(params[:page])

    # or use `to_a.uniq` to remove duplicates (can also be done in the view):
    @people = @q.result.includes(:articles).page(params[:page]).to_a.uniq
end

b.In View

Ransack hổ trợ view với 2 thuộc tính chính: search_form_for và sort_link.

Note: Có 1 số options như: lteq (so sánh <=), gteq (so sánh >=), eq (so sánh =), lt (<), gt (>), in, cont (like %a%), present, null .... Bạn có thể xem chi tiết về những options trên ở đây: https://github.com/activerecord-hackery/ransack/wiki/Basic-Searching .

1.View search_form_for:


<%= search_form_for @q do |f| %>

  # tìm kiếm like %abc%
  <%= f.label :name_cont %>
  <%= f.search_field :name_cont %>

  # Tìm kiếm với những bảng liên quan (relationship)
  <%= f.label :articles_title_start %>
  <%= f.search_field :articles_title_start %>

  # Tìm kiếm nhiều field
  <%= f.label :name_or_description_or_email_or_articles_title_cont %>
  <%= f.search_field :name_or_description_or_email_or_articles_title_cont %>

  <%= f.submit %>
<% end %>

Note: Có 1 số options như: lteq (so sánh <=), gteq (so sánh >=), eq (so sánh =), lt (<), gt (>), in, cont (like %a%), present, null .... Bạn có thể xem chi tiết về những options trên ở đây: https://github.com/activerecord-hackery/ransack/wiki/Basic-Searching .

2.View Sort:

<%= sort_link(@q, :name) %>

#set sort mặc định
<%= sort_link(@q, :name, 'Last Name', default_order: :desc) %>

#multi sort 
<%= sort_link(@q, :last_name, [:last_name, 'first_name asc'], 'Last Name') %>

p/s: Mọi người đóng góp ý kiến nhé!

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

Male avatar

Tri Vo Van (VN)

1 bài viết.
1 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Bài viết liên quan
White
21 3
Giao diện lập trình ứng dụng, còn gọi là API (Application Programming Interface) là chương trình cho phép người dùng sử dụng các phương thức của mộ...
chuong2v viết hơn 2 năm trước
21 3
White
0 0
Performance regression in ActiveRecord model instance creation in Rails 4.1.x When you guys met the performance issue in Rails 4.1.x. And after be...
Luu Nguyen viết hơn 1 năm trước
0 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


Male avatar
{{userFollowed ? 'Following' : 'Follow'}}
1 bài viết.
1 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!