Как я могу сделать флажок по умолчанию «проверенным» в Rails 1.2.3? - PullRequest
40 голосов
/ 25 февраля 2009

Как сделать так, чтобы флажок по умолчанию был «отмечен» при его первоначальном отображении?

Я не нашел "Rails" способ сделать это (это работает), поэтому я сделал это с помощью JavaScript. Есть ли правильный способ сделать это в Rails? Я использую Rails 1.2.3.

Ответы [ 7 ]

44 голосов
/ 11 декабря 2011

Рельсы 3.x

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

Это устанавливает проверенное состояние на true и должно работать нормально. Обратите внимание на синтаксис ruby ​​1.9.x для хэша, для ruby ​​1.8.x используйте формат хэш-тега {: checked => true, ...}

42 голосов
/ 25 февраля 2009

Если вы используете 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
6 голосов
/ 01 декабря 2010

В новом действии вашего контроллера попробуйте:

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

Где: мужской - это атрибут, который вы хотите проверить по умолчанию на страницах /users/new. Это передаст атрибут :male представлению со значением true, в результате чего будет установлен флажок.

5 голосов
/ 05 ноября 2016

Simple

<%= f.check_box :subscribe, checked: "checked" %>
3 голосов
/ 16 мая 2016

Я был шокирован, что ни один из ответов не решил 100% проблемы.
Поскольку все предложенные решения будут давать checked результат в форме редактирования, даже если пользователь снял флажок.

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

Работает для рельсов 4+, не тестировалось ниже.

0 голосов
/ 23 мая 2014

Я так и сделал.

Добавить скрытое поле со значением 0 ВЫШЕ check_box_tag

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

При проверке сервера с != '0'

subscribe = params[:subscribe] != '0'
0 голосов
/ 17 апреля 2011

Это работает на 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...