Giới thiệu Mình xin giới thiệu về cách search bằng gem Ransack qua quá trình mà mình đã áp dụng vào project của bản thân và 1 số options được sử dụng Sử dụng gem trong project Đầu tiên ta...
Giới thiệu
Mình xin giới thiệu về cách search bằng gem Ransack qua quá trình mà mình đã áp dụng vào project của bản thân và 1 số options được sử dụng
Sử dụng gem trong project
Đầu tiên ta thêm gem Ransack vào Gemfile:
1 2 3 | gem "ransack" |
Sau đó chạy
1 2 3 | bundle install |
Ở đây mình có dữ liệu của 1 model user với các trường name, email, address,…
Sau khi cài đặt xong gem, ta vào model của User thêm scope
1 2 3 4 5 6 | scope :search_user, lambda{|search| search&.squish! if search ransack(user_name_or_email_cont: search).result } |
Tiếp theo ở Controller User ta có phương thức Index và search_params:
1 2 3 4 5 6 7 8 9 10 11 | def index params = search_params ? search_params[:user_name_or_email] : nil @users = User.search_user(params).page(params[:page]).per 5 end def search_params return nil unless params[:user_list] params.require(:user_list).permit :user_name_or_email end |
Ở đây ta search theo user_name và email, trên Index hiển thị 5 bản ghi trên 1 trang.
Tiếp theo ở views/users/index.html.erb ta thêm:
1 2 3 4 5 6 7 8 9 10 11 12 | <%= form_tag users_path, method: :get do |f| %> <%= text_field_tag :user_name_or_email, nil, class: "form__control has-icon list-user__search", name: "user_list[user_name_or_email]", value: value_search(params[:user_list], :user_name_or_email), placeholder: t("search.name_email") %> <%= button_tag :submit, class: "form__search-btn" do %> <span class="icon-search-left"></span> <% end %> <% end %> |
Như vậy ta có thể search user qua user_name và email.
Các option
- eq(equals): Trả về kết quả gồm tất cả bản ghi có giá trị chính xác bằng giá trị đã cho.
- matches: Trả về kết quả gồm các bản ghi có giá trị giống với giá trị đã cho.
- It(less than): Trả về kết quả gồm các bản ghi có giá trị nhỏ hơn giá trị đã cho.
- in: Trả về kết quá gồm các bản ghi có giá trị nằm trong khoảng giá trị đã cho.
- cont: Trả về kết quả gồm các bản ghi có giá trị chứa các giá trị đã cho.
- start: Trả về kết quả gồm các bản ghi có giá trị bắt đầu là các giá trị đã cho.
- end: Trả về kết quả gồm các bản ghi có giá trị kết thúc là các giá trị đã cho.
Và nhiều option khác.
TechTalk via viblo.asia