2014-04-23 16 views
9

Tôi có một biểu mẫu tạo người dùng mới. Tôi đang cố gắng thêm tùy chọn thả xuống để chọn cấp độ quyền. Tôi muốn có thể chọn nhiều cấp quyền cho mỗi người dùng.Ruby on Rails 4 chọn nhiều

Đây là quan điểm của tôi, tôi đã thêm {:multiple => true}:

<%= f.label :permission, "Permission Level" %> 
<%= f.select :permission, [ ["Read Only", "read"], ["IP Voice Telephony", "ip_voice"], ["IP Video Telephony", "ip_video_telephony"], ["Enterprise Gateways", "enterprise_gateways"], ["Consumer ATAs", "consumer_atas"], ["IP PBX", "ip_pbx"], ["Master of All", "all"] ], {prompt: "Select Permission Level"}, {:multiple => true}, class: "input-lg" %> 

điều khiển của tôi, tôi đã thêm :permission => []:

def user_params 
    params.require(:user).permit(:name, :email, :password, :password_confirmation, :admin, :permission => []) 
end 

Các lỗi tôi nhận được cho quan điểm của tôi, f.select:

wrong number of arguments (5 for 2..4) 

Làm cách nào để bạn chọn nhiều cho Rails 4?

Trả lời

13

classmultiple là cả hai phần của html_options, vì vậy chúng nên đi cùng nhau trong một mã băm duy nhất.

Thay đổi

<%= f.select :permission, [ ["Read Only", "read"], ["IP Voice Telephony", "ip_voice"], ["IP Video Telephony", "ip_video_telephony"], ["Enterprise Gateways", "enterprise_gateways"], ["Consumer ATAs", "consumer_atas"], ["IP PBX", "ip_pbx"], ["Master of All", "all"] ], {prompt: "Select Permission Level"}, 
{:multiple => true}, class: "input-lg" %> 

Để

<%= f.select :permission, [ ["Read Only", "read"], ["IP Voice Telephony", "ip_voice"], ["IP Video Telephony", "ip_video_telephony"], ["Enterprise Gateways", "enterprise_gateways"], ["Consumer ATAs", "consumer_atas"], ["IP PBX", "ip_pbx"], ["Master of All", "all"] ], {prompt: "Select Permission Level"}, 
{:multiple => true, class: "input-lg"} %> 

Ngay bây giờ bạn đang đi qua chúng riêng rẽ. Vì vậy, đối số đếm cho phương pháp select đang trở thành 5 khi nó nên 4. Do đó, lỗi.

+0

+1 Giải thích, Wow, bạn có thể đưa ra một tham chiếu không, tôi gặp khó khăn khi tìm kiếm. – DDDD

+1

Bạn có thể kiểm tra http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-select và http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/select –

+0

Vâng, Tôi nghĩ tôi là người đầu tiên. Làm mới trang của bạn. : D –

5

lựa chọn của bạn cho: lớp không có trong các hash cho html_options:

{:multiple => true}, class: "input-lg" 

nên

{:multiple => true, class: "input-lg"} 
+0

+1 Giải thích, tôi phải bỏ qua phần đó:/ – DDDD

+1

Đây là API: http: // apidock.com/rails/ActionView/Helpers/FormBuilder/chọn –

+0

Khi bạn sử dụng những người trợ giúp trong một trình tạo biểu mẫu, nó hơi khó hiểu vì chúng có một tùy chọn ít hơn các phiên bản không được bao bọc, vì trình tạo biểu mẫu tự cung cấp cho đối tượng. –

4

tôi đã không kiểm tra nó cho đến nay nhưng được thông báo lỗi là khá thẳng về phía trước, bạn đang cố gắng sử dụng phương thứC#select sử dụng 5 thông số và nó chấp nhận tối đa 4 thông số, đọc API có vẻ như bạn nên cung cấp thuộc tính 'class' trong cùng một băm bạn đã cung cấp 'multiple' vì cả hai đều là html_options .

Cố gắng sử dụng nó như thế này:

<%= f.select :permission, 
      [ ["Read Only", "read"], 
       ["IP Voice Telephony", "ip_voice"], 
       ["IP Video Telephony", "ip_video_telephony"], 
       ["Enterprise Gateways", "enterprise_gateways"], 
       ["Consumer ATAs", "consumer_atas"], 
       ["IP PBX", "ip_pbx"], 
       ["Master of All", "all"] ], 
      {prompt: "Select Permission Level"}, 
      {multiple: true, class: "input-lg"} %> 

Nó cũng sẽ là tốt để có quyền mà mảng tách rời đi nơi khác. Có lẽ nó sẽ giúp duy trì.

http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-select

+1

+1 Thông tin tuyệt vời: D – DDDD