- vừa được xem lúc

Tăng Cường Dropdown Trong Rails Với Select2

0 0 1

Người đăng: NamBK

Theo Viblo Asia

Trong các ứng dụng web hiện đại, việc cải thiện trải nghiệm người dùng là điều không thể thiếu. Đối với các dropdown list dài hoặc cần chức năng tìm kiếm, thư viện Select2 là một giải pháp tuyệt vời. Trong bài viết này, chúng ta sẽ tìm hiểu cách tích hợp Select2 vào ứng dụng Rails một cách dễ dàng và hiệu quả

Screenshot 2025-05-28 at 13.11.13.png

1. Select2 là gì?

Select2 là một plugin JavaScript giúp mở rộng chức năng của thẻ <select>, bao gồm:

  • Tìm kiếm trong dropdown
  • Hỗ trợ chọn nhiều mục
  • Giao diện đẹp và dễ tùy chỉnh
  • AJAX load dữ liệu động

2. Cài đặt Select2 vào Rails

2.1 Thêm thư viện vào ứng dụng

Bạn có thể sử dụng CDN hoặc import qua Webpacker (với Rails 6+) hoặc esbuild (Rails 7)

Với CDN:
Trong file app/views/layouts/application.html.erb, thêm:

<%= stylesheet_link_tag "https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" %>
<%= javascript_include_tag "https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js" %>

Với importmap (Rails 7+ dùng importmap-rails):

Thêm vào config/importmap.rb:

pin "select2", to: "https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"

Rồi trong JavaScript:

import "select2";

3. Áp dụng Select2 vào Form

Ví dụ Form đơn giản:

<%= form_with model: @user do |f| %> <div class="field"> <%= f.label :country %> <%= f.select :country_id, Country.all.collect { |c| [c.name, c.id] }, {}, class: "select2" %> </div>
<% end %>

Kích hoạt Select2

Trong app/javascript/application.js hoặc file JavaScript chính

document.addEventListener("turbo:load", function () { $('.select2').select2();
});

Lưu ý: Nếu bạn dùng Turbo, cần dùng sự kiện "turbo:load" thay vì "DOMContentLoaded" để đảm bảo chạy lại khi chuyển trang.

4. Nâng cấp với AJAX (tải dữ liệu động)

Khi danh sách quá dài, bạn có thể dùng AJAX để tải dữ liệu theo từng từ khóa.

Setup controller endpoint

# app/controllers/tags_controller.rb
class TagsController < ApplicationController def index tags = Tag.where("name ILIKE ?", "%#{params[:q]}%") render json: tags.map { |t| { id: t.id, text: t.name } } end
end

Route

# config/routes.rb
resources :tags, only: [:index]

HTML & JS

# erb
<%= f.select :tag_ids, [], {}, multiple: true, class: "ajax-select2", data: { url: tags_path } %>
# js
document.addEventListener("turbo:load", function () { $('.ajax-select2').select2({ ajax: { url: function () { return $(this).data('url'); }, dataType: 'json', delay: 250, data: function (params) { return { q: params.term }; }, processResults: function (data) { return { results: data }; }, cache: true } });
}); 

5. Kết luận

Việc sử dụng Select2 trong ứng dụng Rails không chỉ giúp nâng cao trải nghiệm người dùng mà còn mở ra khả năng xử lý dữ liệu linh hoạt, đặc biệt với dropdown có nhiều lựa chọn. Hi vọng với bài viết này của mình chia sẻ sẽ giúp ích được các bạn trong việc apply select2 vô trong ứng dụng của mình. Thank you.

Link tài liệu: https://select2.org/

Bình luận

Bài viết tương tự

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 3: Docker-compose)

1. Mở đầu. . .

0 0 138

- vừa được xem lúc

Tích hợp VNPAY vào Rails

Xin chào 500 ae năm mới nhé. Tiếp nối câu chuyện về Thanh toán online mà mình có chia sẽ ở 2 bài trước, mọi người chưa đọc thì có thể vào xem ở đây nhé.

1 1 104

- vừa được xem lúc

Tìm hiểu Adapter Pattern trong Rails

. Nếu là một web developer chắc hẳn chúng ta đã không ít lần đọc qua về các Design patterns hay cách áp dụng chúng để làm cho code trở nên hướng đối tượng hơn, dễ đọc, dễ hiểu, dễ maintain, dễ mở rộng, … Các design patterns được áp dụng khá nhiều trong các Rails projects như Service Object, Decorato

0 0 54

- vừa được xem lúc

Sử dụng Searchkick để tìm kiếm thông minh trên Rails và Elasticsearch

Bạn đã bao giờ tự hỏi, ứng dụng web của mình có thể mở rộng quy mô bằng cách học được các từ khóa mà người dùng tìm kiếm? Có giải pháp nào cung cấp công cụ tìm kiếm tự động nhanh chóng với chỉ 1 từ khóa bất kì? Thật may khi có Searchkick và Elasticsearch là các công cụ hỗ trợ công việc tìm kiếm trở

0 0 112

- vừa được xem lúc

Những sai lầm bạn có thể mắc phải khi code Rails

. Chào các bạn, chào các bạn. Đừng vội đóng tab nha.

0 0 55

- vừa được xem lúc

Một số lưu ý cải thiện performance khi làm việc với Rails

Khi làm việc với ruby on rails chắc hẳn chúng ta sẽ làm việc với active record rất nhiều. Tuy nhiên có nhiều điều có thể ta vẫn chưa thực sự hiểu, ví dụ như ActiveRecord execute SQL query như thế nào? Và cũng còn khá nhiều lập trình viên khác cũng không để ý tới điều này.

0 0 118