Подтвердить что ты не робот

Как проверить check_box в рельсах?

Я сделал флажки, используя следующие рельсы из хелпера:

<%= check_box("tag", tag.id) %>

Однако мне нужно сделать некоторые из них отмеченными по умолчанию. В документации на направляющие не указано, как это сделать. Есть ли способ? Как?

4b9b3361

Ответ 1

check_box_tag вместо check_box имеет способ установить, что он был проверен.

Ответ 2

Это очень простое решение, которое напрямую поддерживается check_box (по крайней мере, с рельсами 4, я не проверял более старую документацию)

<%= check_box("tag", tag.id, {checked: true}) %>

Это установит флажок. Конечно, вместо true вы добавите некоторую логику, которая определяет, проверяется ли каждый из них.

Ответ 3

Рельсы docs говорят, как их проверить, и это зависит от объекта. Если у вас нет объекта-экземпляра для использования с check_box, то лучше всего использовать check_box_tag, как упоминалось выше. Если да, читайте дальше.

Здесь ссылка в документах хелпера check_box. В основном, как это работает, вы должны иметь определенную переменную экземпляра. Эта переменная экземпляра должна иметь метод, который возвращает целое число или логическое значение. Из документов:

Этот объект должен быть объектом экземпляра (@object), а не локальным объект. Его предназначение заключается в том, что метод возвращает целое число, и если это целое число выше нуля, тогда флажок установлен.

Например, предположим, что у вас есть экземпляр @tag в вашем представлении с включенным методом. Следующий фрагмент приведет к тому, что флажок будет проверен, если включено значение true в объекте @tag и не отмечено, когда оно ложно. Чтобы включить его по умолчанию, установите для включенного атрибута значение true в вашем контроллере. Последние две переменные - это значения, которые вы хотите отправить с помощью формы, когда флажок установлен и снят.

<%= check_box "tag", "enabled", {}, "1", "0" %>

Много раз вы увидите помощника check_box, используемого с компоновщиком форм. Поэтому, если form_for был использован для экземпляра @tag, вы скорее всего использовали бы этот фрагмент:

<%= f.check_box :enabled %>

Ответ 4

Если вам нужно проверить check_box на new и правильно заполнить на edit, вы можете сделать:

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

Как я уже говорил здесь

Ответ 5

Нет необходимости в записи: true для rails >= 4.0 Просто напишите

<%= check_box_tag "name", value, true %> # true or false

Ответ 7

Проблема со всеми этими решениями заключается в том, что она не очень хорошо работает с хешем params при повторных вызовах, поэтому в данный момент я использую что-то вроде этого,

# ApplicationHelper
def resolve_boolean_parameter resource, attribute, options = {}
  default = options.delete(:default)
  return default unless params[:utf8]

  return params[resource][attribute] == "1"
end

а затем в представлении:

<div><%= f.label :accepts_newsletter, "Receive Newsletters" %>
  <%= f.check_box :accepts_newsletter, :checked => resolve_boolean_parameter(:user, :accepts_newsletter, default: true)  %>
</div>

Ответ 8

Новая функция, помещенная в ваш помощник

def check_if_true(item)
  if(item == 'true' or item == true or item == 1 or item == '1')
    return true
  else
    return false
  end
end

В вашем представлении

<%= check_box("test", "active", {checked: check_if_true(@test.active) , :multiple => true, :style => "margin-left: 16px;"}, "true", "false") %>