Rails:form_for复选框设置为true或false是否选中/取消选中该框

use*_*382 25 html ruby forms ruby-on-rails

我有一个名为users的模型,它有2个布尔属性send_emailsend_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 %>
Run Code Online (Sandbox Code Playgroud)

这是update行动的user_controller

def update
    @user = User.find(params[:id])
    @user.update_attributes(params[:user])
    redirect_to @user
end
Run Code Online (Sandbox Code Playgroud)

表单和更新看起来很完美,但是当我提交此表单并选中send_email或send_text框时,它不会将用户模型的属性(send_email,send_text)更改为false

Mat*_*att 51

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

<div class="field">
    <%= f.label "Get Email" %> <br />
    <%= f.check_box :send_email %> <br />
</div>
Run Code Online (Sandbox Code Playgroud)

它应该按照你的预期开始工作.如果属性为true,则会勾选复选框,反之亦然,当您提交表单时,选中状态将影响该属性.你的其余代码很好.