2010-12-13 9 views

Odpowiedz

48

Najprostszym na to sposobem jest ustawienie tych pól wyboru, aby stać tablicą.

HTML:

<input type="checkbox" name="tag_ids[]" value="1" /> 
<input type="checkbox" name="tag_ids[]" value="2" /> 
<input type="checkbox" name="tag_ids[]" value="3" /> 

Kontroler:

tag_ids = params[:tag_ids] 

(Oczywiście, można by prawdopodobnie używając form_for opartych pomocników w widoku, a zatem masowe przypisywanie identyfikatorów etykietę. to tylko najbardziej ogólny przykład.)

+0

Co się stanie, jeśli użytkownik odznaczenie pola wyboru? Czy tag_ids [] zostanie przesłane jako pusta tablica? –

+4

@Joe Van Dyk: jeśli żadna z wartości o nazwie 'tag_ids []' nie zostanie przesłana w żądaniu HTTP, wówczas Railsy nie będą myśleć o umieszczeniu 'tag_ids' w' params'. Musisz sam to rozliczyć, np. 'Params [: tag_ids] || = []' – Matchu

+8

Aby uzyskać ten kod HTML, możesz użyć 'f.check_box: tag_ids, {multiple: true}, 1, zero' . 'Nil' oznacza" bez ukrytego wejścia 0 ". Tego rodzaju rzeczy są słabo udokumentowane. –

-2

Jeśli chcesz użyć parametru checked, musisz napisać to:

check_box_tag "tag_ids[]", 1, true 

A nie tak:

check_box_tag 'tag_ids[]', 1, true 

Zajęło mi trochę czasu, aby dowiedzieć się, mam nadzieję, że komuś pomóc.

+0

Więc mówisz, że pojedyncze cytaty '' 'kontra podwójne cudzysłowy' "robią różnicę tutaj? –

14
f.check_box :tag_ids, {multiple: true}, 1, nil 

Czy prawidłowa odpowiedź:

Oto powód, istnieje „wiele: prawdziwe” opcja, która pozwala Twój wkład należy umieścić w tablicy. Jeśli nie ma opcji multiple: true, nie będzie to możliwe.

0

Oto przykład widoku i kontrolera, na przykład, gdzie wiele środków czyszczących może znajdować się w wielu miastach.

<%= form_for(@cleaner) do |f| %> 
    <p> 
    <%= f.label :cities %><br /> 
    <% for city in City.all %> 
     <%= check_box_tag "cleaner[city_ids][]", city.id, @cleaner.cities.include?(city) %> 
     <%=h city.name %><br /> 
    <% end %> 
    </p> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

A w sterowniku

def cleaner_params 
    params.require(:cleaner).permit(city_ids: []) 
end 

można znaleźć kompletny poradnik na „szyny sposób” robienia tego https://kolosek.com/rails-join-table/

Powiązane problemy