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

Posted

技术标签:

【中文标题】Rails:form_for 复选框设置为 true 或 false 是不是选中/取消选中该框【英文标题】:Rails: form_for checkbox set to true or false whether the box is checked/uncheckedRails:form_for 复选框设置为 true 或 false 是否选中/取消选中该框 【发布时间】:2013-05-26 12:07:27 【问题描述】:

我有一个名为 users 的模型,它有两个布尔属性 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 %>

这是user_controllerupdate 操作

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

【问题讨论】:

那么你的问题是什么? 它不起作用哈哈。抱歉,我忘记发布了,表单和更新工作完美,但是当我提交此表单并选中 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>

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

【讨论】:

【参考方案2】:

关于表单和更新数据库的更多信息

确实,最后一个答案是对的:使用 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

【讨论】:

【参考方案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 %>

【讨论】:

【参考方案4】:

我遇到了类似的问题。我首先通过向用户添加教师角色并将其设为布尔值并将其设置为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>

【讨论】:

以上是关于Rails:form_for 复选框设置为 true 或 false 是不是选中/取消选中该框的主要内容,如果未能解决你的问题,请参考以下文章

Rails 5:form_for 与 form_with

使用 HABTM 关系更新复选框的值——Rails

rails form_for标签的自定义文本

Rails 将 form_for 对象传递给部分

Rails form_for 具有相同属性的嵌套和关联资源已填充文本

markdown 使用Rails FORM_FOR在新窗口中打开PDF