2011-07-12 53 views
5

Tôi có một đối tượng mô hình User có thuộc tính permission bị giới hạn bởi validates_inclusion_of đến ['user','org_admin','site_admin']. Khi thiết kế tạo/chỉnh sửa biểu mẫu cho đối tượng này, tôi không muốn nhân đôi danh sách này, trong trường hợp nó thay đổi sau này. Có một "Rails cách" để làm điều này, hoặc tôi nên chỉ cần trích xuất danh sách các giá trị hợp lệ vào một thuộc tính có thể truy cập từ bên ngoài của dụ?Làm cách nào để tạo một danh sách thả xuống các giá trị hợp lệ được đặt bởi validates_inclusion_of?

Trả lời

4

Nếu tôi thực sự muốn làm việc với chuỗi, tôi có thể xác định một người dùng :: PERMISSIONS constance bao gồm các quyền được đề cập.

class User < ActiveRecord::Base 
    PERMISSIONS = ['user','org_admin','site_admin'] 
    validates_inclusion_of :permission, :in => PERMISSIONS 
end 

Một hình thức đơn giản (sử dụng simple_form trong ví dụ)

simple_form_for(@user) do |f| 
    f.input :permission, :as => :select, :collection => User::PERMISSIONS 
end 

Nó sẽ càng gọn gàng để tạo ra một mô hình cho phép và chỉ lưu permission_id khi bạn tạo một người dùng mới.

Có lẽ có nhiều cách tốt hơn để làm điều đó vì vậy tôi mong chờ các câu trả lời khác.

+0

Đây là cách tôi đang thực hiện ngay bây giờ, nhưng tôi không chắc đó có phải là cách "Railsiest" hay không. Nhân tiện, tôi không biết về điều ": as =>: select"; điều đó thật tuyệt vời! Cảm ơn vì sự trả lời. –

+0

Vâng rằng: as =>: select sẽ chỉ hoạt động nếu bạn đang sử dụng các biểu mẫu đơn giản hoặc ngữ nghĩa, chỉ để xóa nó nếu nó không rõ ràng! :) Tôi hy vọng chúng tôi sẽ có một số ý kiến ​​khác nhau để xem liệu có cách nào tốt hơn để làm điều đó không. – Maran

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