5

Tôi muốn có một danh sách thả xuống chọn2, nơi tôi có thể chọn nhiều thẻ hiện có và thêm thẻ mới.Rails hoạt động như có thể gắn thẻ với select2 (và simple_form)

Tôi đã thử nhiều cách khác nhau và tôi không nhận được hộp select2 hoạt động hoặc chỉ có một giá trị được chuyển (lần cuối).

Đây là gần nhất tôi đã nhận (qua giá trị cuối cùng):

<%= f.input :tag_list, collection: @model.tags.map { |t| t.name }, input_html: { :style=> 'width: 300px', class: "taggable", data: { placeholder: "Tags" }} %> 

Trả lời

3

Như tôi đã đề cập trước đây, thư viện select2 bình thường hiện chỉ sử dụng các loại đầu vào được chọn, nhưng nó hoạt động với các kiểu đầu vào khi sử dụng thư viện có chọn 2.

Vì vậy, đây là cách thoát khỏi một vấn đề.

Tôi vẫn gặp sự cố khi chỉ truyền một giá trị duy nhất. Tôi đã thực sự sao chép/dán mã từ một trong các ví dụ và nó đã sai. Người ta nói rằng các tham số mạnh nên bao gồm: tag_list, điều này hiển nhiên, nhưng thực tế {tag_list []} là cần thiết để chấp nhận tất cả các giá trị.

Hoạt động như một sự quyến rũ ngay bây giờ.

+0

Điểm của bạn về tag_list [] rất quan trọng đối với tôi - các thẻ đang được gửi dưới dạng một chuỗi các chuỗi như ["a", "b", "c"], chứ không phải một chuỗi như "a, b, c" –

1

Hãy thử thế này, hy vọng điều này sẽ làm việc cho bạn.

= f.input :tag_list, class: "taggable",data: {options: @model.tags.map { |t| t.name }} 

$(".taggable").select2(
    tags: $('.taggable').data('options') 
    width: "252px" 
); 
+0

Đáng tiếc là nó không giúp đỡ. Có vẻ như nó phải chọn loại đầu vào. Vì vậy, tôi thêm vào như:: chọn, nếu không nó chỉ là một hộp đầu vào bình thường. Bằng cách này, bây giờ tôi nhận được thả xuống, nhưng với tùy chọn Có và Không, không phải thẻ của tôi. Ngoài ra, nó không phải là đa lựa chọn. –

+0

hãy để tôi suy nghĩ về nó. –

2

Đối với tôi làm việc này:

Cà phê kịch bản:

$(".tags").select2 
    theme: "bootstrap", 
    tags: true 
    tokenSeparators: [','] 

và trong giao diện:

= f.input :tag_list, input_html: { class: 'tags', multiple: "multiple" }, collection: @video.tag_list 

phần quan trọng là nhiều: "nhiều"

Và tất nhiên, cách Mitja nói, đừng quên đặt {tag_li st: []} để thông số mạnh mẽ của bộ điều khiển.

Và như Ví dụ, nếu bạn muốn có thẻ của bạn như gợi ý trong danh sách thả xuống, bạn có thể làm điều này:

= f.input :tag_list, input_html: { class: 'tags', multiple: "multiple" }, collection: ActsAsTaggableOn::Tag.most_used(30), value_method: :name 
Các vấn đề liên quan