复选框值不会更改ROR中表值的列

时间:2014-08-21 07:11:09

标签: ruby-on-rails checkbox

我的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

请建议我等待回复。 感谢

2 个答案:

答案 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中收到已检查/未检查的值