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

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

4b9b3361

Ответ 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 %>