我的ruby on rails应用程序中有复选框,如下所示:
<table>
<% if c.CommunicationMode == "Email" and c.Private.to_s == "1" %>
<tr>
<td>
<label class="checkbox inline">
<input type="checkbox" name="ChkBx_Email" id="ChkBx_Email" value="1" checked = "checked">
Email
</label>
</td>
</tr>
<% else %>
<tr>
<td>
<label class="checkbox inline">
<%= check_box_tag 'ChkBx_Email' %>
Email
</label>
</td>
</tr>
<% end %>
</table>
在我的Communication
表中,我位于列之下:
id | CommunicationMode | Private
1 | Email | 1
您可以在表格的Private
列中看到,我将值1
:表示复选框为checked
,当我取消选中该复选框时,Private
列值从1
替换为0
,如下所示:
id | CommunicationMode | Private
1 | Email | 1
但是,当我再次选中该复选框时,Private
列值未从0
替换为1
。
并且是控制器代码:
@user_communication=Communication.where(:UserID => current_user.id)
if !@user_communication.blank?
@user_communication.each do |c|
if params[:settings][:ChkBx_Email].to_i == 1
c.update_attribute( :Private, params[:settings][:ChkBx_Email] )
elsif params[:settings][:ChkBx_Email].to_i == 0
c.update_attribute( :Private, params[:settings][:ChkBx_Email] )
end
end
end
请建议我等待回复。 感谢
答案 0 :(得分:2)
您需要更改输入名称:
<input type="checkbox" name="settings[ChkBx_Email]" id="settings[ChkBx_Email]" value="1" checked = "checked">
或控制器代码:
if params[:ChkBx_Email].to_i == 1
c.update_attribute( :Private, params[:ChkBx_Email] )
elsif params[:ChkBx_Email].to_i == 0
c.update_attribute( :Private, params[:ChkBx_Email] )
end
答案 1 :(得分:0)
将您的控制器代码更改为: -
if params[:ChkBx_Email] == 1
c.update_attribute( :Private, params[:ChkBx_Email] )
elsif params[:ChkBx_Email] == 0
c.update_attribute( :Private, params[:ChkBx_Email] )
end
考虑到您在params中收到已检查/未检查的值