2014-05-01 16 views
27

Tôi có ứng dụng Rails 4.1, trong đó tôi sử dụng enum để biểu thị mức độ riêng tư của một đối tượng.Cách cấu hình đúng Rails 4.1 Enums trong ActiveAdmin

Trong sơ đồ của tôi:

t.integer "privacy_level", default: 0 

Trong mô hình của tôi:

enum privacy_level: { privacy_private: 0, privacy_trusted: 1, privacy_public: 2 } 

Trong hồ sơ đăng ký ActiveAdmin tôi:

index do 
    column :privacy_level 
    default_actions 
end 

form do |f| 
    f.inputs "Edit My Model" do 
    f.input :privacy_level 
    end 
    f.actions 
end 

Trên trang index ActiveAdmin, nó hoạt động tuyệt vời. Mức độ riêng tư của từng đối tượng hiển thị là "privacy_private", "privacy_trusted" và "privacy_public".

Tuy nhiên, khi tôi cố chỉnh sửa đối tượng, kiểu đầu vào là một hộp số có mũi tên lên và xuống cho phép tôi đặt bất kỳ số nguyên nào, bất kể số nguyên có phải là mức độ riêng tư hợp lệ hay không giá trị).

Điều tôi muốn xem là đầu vào thả xuống (chọn) với ba giá trị chuỗi được liệt kê mà tôi đã xác định trong mô hình của mình.

Trả lời

45

Building tắt của câu trả lời của Jack, đây là những gì làm việc cho tôi. Giả sử mô hình ActiveRecord của bạn là Tweets:

f.input :privacy_level, as: :select, collection: Tweet.privacy_levels.keys

điều quan trọng cần lưu ý ở đây:

  • ActiveRecord của bạn có một từ điển hữu ích (có sẵn tại enum_name.pluralize) các khóa enum để giá trị.
  • sử dụng chuỗi (và bỏ qua biểu diễn số nguyên cơ bản) giúp dễ dàng ghi vào giá trị enum.
+0

Đây là câu trả lời đúng. Tôi đã không nhận thấy số nhiều (cấp) lúc đầu. – Sebastian

+11

: include_blank => false sẽ giúp thêm –

+1

Và hãy nhớ để cho phép các param trong định nghĩa quản trị của bạn :) – Jeewes

6

làm điều này:

f.input :privacy_level, :as => :select, :collection => privacy_level.keys.to_a 
+0

Vâng, điều đó có ý nghĩa. Tôi có thể đặt mức độ riêng tư trong bảng điều khiển với my_model.privacy_level = "privacy_public". Nó sẽ có ý nghĩa rằng tôi có thể sử dụng một hộp chọn với các chuỗi để thiết lập mức độ riêng tư. Cảm ơn! –

+2

bạn hoan nghênh, vui mừng giúp đỡ, tôi đã upvoted câu hỏi của bạn để u có thể nhận được điểm, xin vui lòng làm tương tự cho tôi, nhờ – jimagic

+0

ở đó, tôi upvote^_^ – bbozo

18

Để sử dụng enums trong các bộ lọc ActiveAdmin của sử dụng:

filter :level, as: :select, collection: Model.levels

giả định một thuộc tính enum tên level

này sẽ đảm bảo để thực sự đưa các giá trị số nguyên trong truy vấn và không tên khóa.

Các vấn đề liên quan