Как я могу установить флажок по умолчанию как "проверен", когда он отображается вначале?
Я не нашел способ Rails для этого (что работает), поэтому я сделал это с помощью JavaScript. Есть ли способ сделать это в Rails? Я использую Rails 1.2.3.
Как я могу установить флажок по умолчанию как "проверен", когда он отображается вначале?
Я не нашел способ Rails для этого (что работает), поэтому я сделал это с помощью JavaScript. Есть ли способ сделать это в Rails? Я использую Rails 1.2.3.
Если вы используете 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
Rails 3.x
= form_for(@user) do |f|
= f.check_box :subscribe, {checked: true, ...}
Задает проверенное состояние true и должно работать нормально. Обратите внимание на синтаксис ruby 1.9.x хеша, для ruby 1.8.x используйте формат хэш-тегов {: checked = > true,...}
В вашем новом действии контроллера попробуйте:
@user = User.new(:male => true)
Где: мужчина - это атрибут, который вы хотите проверить по умолчанию на страницах /users/new
. Это передаст атрибут :male
для представления со значением true
, в результате появится флажок.
Я был шокирован тем, что ни один из ответов не разрешил 100% проблемы.
Поскольку все предлагаемые решения дадут результат checked
в форме редактирования, даже если пользователь снял флажок.
<%= f.check_box :subscribe, checked: @event.new_record? || f.object.subscribe? %>
Работает для рельсов 4 +, не тестируется ниже.
Простой
<%= f.check_box :subscribe, checked: "checked" %>
Это работает на 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
Я сделал это таким образом.
Добавить скрытое поле со значением 0 ABOVE check_box_tag
<%= hidden_field_tag :subscribe, '0' %>
<%= check_box_tag :subscribe, '1', params[:subscribe] != '0' %>
На сервере проверьте с помощью != '0'
subscribe = params[:subscribe] != '0'