Я сделал флажки, используя следующие рельсы из хелпера:
<%= check_box("tag", tag.id) %>
Однако мне нужно сделать некоторые из них отмеченными по умолчанию. В документации на направляющие не указано, как это сделать. Есть ли способ? Как?
Я сделал флажки, используя следующие рельсы из хелпера:
<%= check_box("tag", tag.id) %>
Однако мне нужно сделать некоторые из них отмеченными по умолчанию. В документации на направляющие не указано, как это сделать. Есть ли способ? Как?
check_box_tag
вместо check_box
имеет способ установить, что он был проверен.
Это очень простое решение, которое напрямую поддерживается check_box
(по крайней мере, с рельсами 4, я не проверял более старую документацию)
<%= check_box("tag", tag.id, {checked: true}) %>
Это установит флажок. Конечно, вместо true
вы добавите некоторую логику, которая определяет, проверяется ли каждый из них.
Рельсы 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 %>
Если вам нужно проверить check_box на new
и правильно заполнить на edit
, вы можете сделать:
<%= f.check_box :subscribe, checked: @event.new_record? || f.object.subscribe? %>
Как я уже говорил здесь
Нет необходимости в записи: true для rails >= 4.0 Просто напишите
<%= check_box_tag "name", value, true %> # true or false
Используя check_box_tag
, вы можете установить его на true
, чтобы он уже был проверен. Подробнее здесь: http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag
Проблема со всеми этими решениями заключается в том, что она не очень хорошо работает с хешем 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>
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") %>