Как я могу сделать флажок по умолчанию "установленным" в Rails 1.2.3?
Как сделать так, чтобы флажок по умолчанию был «установлен», когда он изначально отображается?
Я не нашел "Rails" способа сделать это (который работает), поэтому я сделал это с помощью JavaScript. Есть ли правильный способ сделать это в Rails? Я использую Rails 1.2.3.
Ответов (7)7
Если вы используете check_box
в контексте формы, тогда флажок покажет то значение, которое имеет это поле.
@user = Person.find(:first)
@user.active = true
check_box 'user', 'active' #=> will be checked by default
Если вы используете check_box_tag
, третий параметр - это начальное состояние ( check_box_tag
doc ):
check_box_tag "active", 1, true
Я был шокирован тем, что ни один из ответов не решает проблему на 100%.
Поскольку все предлагаемые решения дадут checked
результат в форме редактирования, даже если пользователь снял флажок.
<%= f.check_box :subscribe, checked: @event.new_record? || f.object.subscribe? %>
Работает на рельсах 4+, ниже не тестировалось.
Это работает на Rails 2.3.x и Rails 3.0.x!
Для нового действия в контроллере этот флажок установлен в значение true.
# in the controller
def new
@user = Person.find(:first)
@user.active = true
end
В форме: флажок устанавливается при создании (вызовом new), но если проверка не выполняется, флажок остается установленным со значением, которое пользователь опубликовал.
# in the view
<%= form_for ..... |f| %>
...
<%= f.check_box :active %>
...
<% end %>
Другой способ, но не очень хороший (если вы хотите изменить логику, вам нужно выполнить новую миграцию), - это установить : default => 1 в миграции данной модели и атрибута.
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