10

Tôi có một mô hình Đăng mà tôi đang truy cập thông qua ActiveAdmin. Nó cũng có thể gắn thẻ bằng cách sử dụng đá quý actions_as_taggable_on. Vì vậy, quản trị viên có thể thêm, chỉnh sửa hoặc xóa các thẻ từ một Bài đăng cụ thể.Thao tác thẻ với actions_as_taggable_on và ActiveAdmin

Cách thông thường để thêm các chức năng gắn thẻ cho tài nguyên trong bảng quản trị của bạn là bằng cách làm này trong admin/posts.rb:

ActiveAdmin.register Post do 
    form do |f| 
    f.inputs "Details", :multipart => true do 
     f.input :tag_list 
     # and the other irrelevant fields goes here 
    end 

    f.buttons 
    end 
end 

Tuy nhiên, tôi muốn có các thẻ được lựa chọn từ một bội số chọn trường biểu mẫu và không được nhập theo cách thủ công trong trường văn bản (giống như trong mã ở trên). Vì vậy, tôi đã thử làm điều này:

 f.input :tag_list, :as => :select, 
         :multiple => :true, 
         :collection => ActsAsTaggableOn::Tag.all 

nhưng nó không hoạt động như mong đợi. Điều này thực sự tạo ra các thẻ mới với một số giá trị số nguyên cho tên và gán chúng cho Bài đăng đó. Có người nói với tôi rằng cần thêm mã để làm việc này.

Bất kỳ manh mối nào về cách thực hiện điều này? Đây là mô hình của tôi chỉ trong trường hợp: http://pastie.org/3911123

Xin cảm ơn trước.

+0

Tôi đang cố gắng làm điều tương tự, nhưng vì hành vi có thể hoạt động đòi hỏi một chuỗi được phân tách bằng dấu phẩy, tôi không thể nhận được thông số mạnh để chấp nhận mảng mà trình đơn thả xuống đa lựa chọn cung cấp. Làm thế nào bạn xử lý này? – Philip7899

Trả lời

10

Thay vì

:collection => ActsAsTaggableOn::Tag.all 

thử

:collection => ActsAsTaggableOn::Tag.pluck(:name) 

Thiết bộ sưu tập để Tag.all đang xảy ra để gắn thẻ bài viết của mình với ID của thẻ, vì đó là cách thẻ được xác định bởi mặc định (đó là nơi mà các số nguyên giá trị cho các tên đến từ). map(&:name) yêu cầu trình tạo biểu mẫu sử dụng tên của thẻ thay thế.

+4

'ActsAsTaggableOn :: Tag.pluck (: name)' sẽ tốt hơn vì nó sẽ không tải tất cả các thẻ vào bộ nhớ trước khi giải nén tên. –