29

我有一个名为 users 的模型,它有 2 个布尔属性send_emailsend_text. 我有一个编辑用户模型的表单,我希望它将这些属性设置为真/假,具体取决于该框是否被选中/取消选中。这是我的表格

<%= 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 %>

updateuser_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

4

4 回答 4

57

当您的表单作用于对象时,Rails 会为您执行此操作,只需将所有额外的内容从标签中移除,如下所示:

<div class="field">
    <%= f.label "Get Email" %> <br />
    <%= f.check_box :send_email %> <br />
</div>

一切都应该按照您的预期开始工作。如果属性为真,复选框将被勾选,反之,提交表单时的选中状态将影响属性。您的其余代码都很好。

于 2013-05-30T19:31:01.123 回答
3

有关表格和更新数据库的更多信息

的确,最后一个答案是正确的:使用 form_for 语法就足够了,Rails 会为您执行 unchecked: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
于 2015-07-09T12:12:07.727 回答
1

我有同样的问题。我做到了

<% @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 %>
于 2017-03-18T12:36:58.657 回答
0

我有一个类似的问题。我首先通过向用户添加教师角色并将其设为布尔值并将其设置为default:false.

rails generate migration add_teacher_to_users teacher:boolean

然后创建一个注册为:

<div class="field">
  <%= form.label "Tutor/Teacher? Tick" %>
  <%= form.check_box :teacher, class: "form-control", placeholder: "Tick if you are a Tutor" %>
</div>
于 2020-06-09T12:40:17.200 回答