2009-02-25 8 views

Odpowiedz

39

Jeśli używasz check_box w kontekście formularza, to pole wyboru będzie pokazywało dowolną wartość tego pola.

@user = Person.find(:first) 
@user.active = true 
check_box 'user', 'active' #=> will be checked by default 

Jeśli używasz , trzeci parametr jest stan początkowy (check_box_tag doc):

check_box_tag "active", 1, true 
+0

nie jestem zapisu/odczytu wartości check_box do DB, więc przejście na check_box_tag i korzystania prawdziwy przełącznik rozwiązało problem. Dzięki! – daustin777

+0

Metody _tag są dla form niemodalnych. Te inne niż te. – wesgarrison

+0

@wesgarrison Używam check_box_tag jak ten <% = check_box_tag "benificiary_id [# {b.id}]", b.id,: name => "benificiary_id []"%> tutaj, jak sprawdzić czy jakikolwiek rekord sprawdzone czy nie podczas aktualizacji? domyślnie moja akcja aktualizacji przyjmuje wszystkie wartości pola wyboru, nawet jeśli niektóre z nich są odznaczone :( –

6

w kontroler nowego działania, spróbuj:

@user = User.new(:male => true) 

Gdzie: mężczyzna jest atrybutem, który ma być domyślnie zaznaczony na stronach /users/new. Spowoduje to przekazanie atrybutu :male do widoku o wartości true, co spowoduje zaznaczenie pola wyboru.

0

Działa to w Railsach 2.3.x i Railsach 3.0.x!

W akcji nowej w kontrole, pole wyboru jest ustawione na true.

# in the controller 
def new 
    @user = Person.find(:first) 
    @user.active = true 
end 

w formie: pole wyboru jest zaznaczone na stworzenie (przez wywołanie nowy), ale jeśli uwierzytelnienie nie powiedzie pole wyboru jest ustawiony z wartością, że użytkownik ma posta.

# in the view 
<%= form_for ..... |f| %> 
    ... 
    <%= f.check_box :active %> 
    ... 
<% end %> 

Innym sposobem, ale nie tak dobre (jeśli chcesz zmienić logikę trzeba zrobić nową migrację) jest ustawiony : default => 1 w migracji danego modelu i atrybut.

class CreatePeople < ActiveRecord::Migration 
    def self.up 
    create_table :people do |t| 
     ... 
     t.boolean :active,    :null => false, 
             :default => 1 
     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :people 
    end 
end 
36

Rails 3.x

= form_for(@user) do |f| 
    = f.check_box :subscribe, {checked: true, ...} 

Ustawia sprawdzenia stanu na prawdziwe i powinny działać prawidłowo. Zwróć uwagę na składnię ruby ​​1.9.x skrótu, dla ruby ​​1.8.x użycie hash tag format {: checked => true, ...}

+1

Znalazłem to przydatne przy wyciągnięciu z rekordu DB – ScottJShea

+0

działa również z Railsami 2.3.11, wystarczy użyć składni skrótu Ruby 1.8.7 – Paul

+0

Działa również w 4.2. –

0

Zrobiłem to w ten sposób.

Dodaj ukryte pole o wartości 0 POWYŻEJ check_box_tag

<%= hidden_field_tag :subscribe, '0' %> 
<%= check_box_tag :subscribe, '1', params[:subscribe] != '0' %> 

Na czeku serwerów z != '0'

subscribe = params[:subscribe] != '0' 
3

Byłem w szoku, że żadna z odpowiedzi rozwiązać 100% problemu.
Wszystkie proponowane rozwiązania dadzą checked wynik w formularzu edycji, nawet jeśli użytkownik odznaczył to pole wyboru.

<%= f.check_box :subscribe, checked: @event.new_record? || f.object.subscribe? %>

Works do szyn 4 +, nie testowane poniżej.

+0

To powinno być oznaczone jako poprawna odpowiedź. – AlphaNico

1

Proste

<%= f.check_box :subscribe, checked: "checked" %> 
Powiązane problemy