Rails: флажок form_for установлен в true или false, будет ли флажок установлен/снят флажок
У меня есть модель, называемая пользователями с двумя логическими атрибутами send_email
и send_text
. У меня есть форма, которая редактирует модель User, и я хочу, чтобы эти атрибуты были установлены в true/false в зависимости от того, проверяется/не проверяется флажок. Вот моя форма
<%= form_for(@user) do |f| %>
<div class="field">
<%= f.label :email %> <br />
<%= f.text_area :email %> <br />
</div>
<div class="field">
<%= f.label :cell %> <br />
<%= f.text_area :cell %> <br />
</div>
<div class="field">
<%= f.label "Get Email" %> <br />
<%= f.check_box :send_email, {}, true, false %> <br />
</div>
<div class="field">
<%= f.label "Get Text" %> <br />
<%= f.check_box :send_text, {}, true, false %> <br />
</div>
<div class="actions">
<%= f.submit "Submit", class: "button small radius" %>
<%= link_to "go back", @user, class: "button small radius secondary" %>
</div>
<% end %>
И вот действие update
user_controller
def update
@user = User.find(params[:id])
@user.update_attributes(params[:user])
redirect_to @user
end
Форма и обновление выглядят так, как будто они работают отлично, но когда я отправляю эту форму с проверенным полем send_email или send_text, она не изменяет атрибуты пользовательской модели (send_email, send_text) на false
Ответы
Ответ 1
Rails сделает это для вас, когда ваша форма действует на объект, просто оставьте все лишние вещи от тега:
<div class="field">
<%= f.label "Get Email" %> <br />
<%= f.check_box :send_email %> <br />
</div>
И все должно начинаться так, как вы ожидаете. Флажки будут отмечены галочкой, если атрибут true, и наоборот, проверенное состояние при отправке формы повлияет на атрибут. Остальная часть кода в порядке.
Ответ 2
Дополнительная информация о формах и обновлении базы данных
В самом деле, последний ответ правильный: использование синтаксиса form_for достаточно, и Rails сделает связь непроверенной: false/checked: true для вас.
<div class="field">
<%= f.label "Get Email" %> <br />
<%= f.check_box :send_email %> <br />
</div>
У меня была такая же проблема даже с этим синтаксисом. Дело в том, что серверная консоль вернула мне Unpermitted parameter: checkbox_value
: не забудьте обновить требуемые/разрешенные параметры для ввода в params
! И в моем случае:
# ***_controller.rb
private
def operator_params
params.require(:operator).permit(:name, :website, :checkbox_value, :global)
end
Ответ 3
У меня была такая же проблема. Я сделал
<% @batches.each do |batch| %>
<div class="name_list<%=cycle('odd', 'even')%>"><li>
<label><%= check_box_tag "send_sms[batch_ids][]", batch.id,false,:class=>'right' %>
<div class="att_list_names"> <%= batch.full_name %></div> </label>
</li> </div>
<% end %>