2014-04-23 15 views
9

Ho un modulo che crea nuovi utenti. Sto cercando di aggiungere un'opzione a discesa per selezionare i livelli di autorizzazione. Voglio essere in grado di selezionare più livelli di autorizzazione per utente.Ruby on Rails 4 selezionare più

Questa è la mia opinione, ho aggiunto {: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" %> 

mio controllo, ho aggiunto :permission => []:

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

L'errore che ottengo per il mio punto di vista, f.select:

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

Come si effettua un multiplo di selezione per Rails 4?

risposta

13

class e multiple fanno entrambi parte di html_options, quindi devono essere uniti in un unico hash.

Change

<%= 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" %> 

Per

<%= 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"} %> 

In questo momento si sta passando loro separatamente. Quindi, l'argomento conta per il metodo select diventa 5 quando dovrebbe essere 4. Quindi, l'errore.

+0

+1 Spiegazione, Wow, può per favore dare un riferimento, ho avuto difficoltà a trovare uno. – DDDD

+1

Puoi controllare http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-select e http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/select –

+0

Bene, Pensavo di essere il primo Aggiorna la tua pagina. : D –

5

L'opzione per: classe non è nella hash per html_options:

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

dovrebbe essere

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

+1 Spiegazione, Devo perdere quella parte:/ – DDDD

+1

Ecco l'API: http: // apidock.com/rails/ActionView/Helpers/FormBuilder/select –

+0

Quando si usano gli helper in un form builder è un po 'di confusione perché prendono una opzione in meno rispetto alle versioni non-wrapped, dato che il generatore di moduli stesso fornisce l'oggetto. –

4

non ho la prova che finora, ma il messaggio di errore è piuttosto semplice, stai provando ad usare il metodo #select usando 5 parametri e accetta al massimo 4 parametri, leggendo l'API sembra che tu debba fornire l'attributo 'class' nello stesso hash che hai fornito al 'multiple' in quanto entrambi sono html_options .

tenta di utilizzare in questo modo:

<%= 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"} %> 

Sarebbe anche bello avere che le autorizzazioni serie disaccoppiato in un altro luogo. Forse aiuterà a mantenere.

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

+1

+1 Impressionante informazioni: D – DDDD