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_email
和 send_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_controller
的update
操作
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 是不是选中/取消选中该框的主要内容,如果未能解决你的问题,请参考以下文章