Ruby on Rails:在尝试编辑帖子时,Checkbox会被取消选中

时间:2016-11-19 10:09:40

标签: ruby-on-rails ruby checkbox ruby-on-rails-5

当我创建一个新帖子(passengerride)时,它成功地在数据库中存储了多个值。但是,当我尝试编辑帖子(passengerride)时,复选框将被取消选中。

这是我的表格:

应用/视图/ passengerrides / _form.html.erb:

<%= form_for @passengerride do |f| %>
        ......
          <div class="form-group ">
            <div class="control-label col-sm-2 requiredField">
              <%= f.label :okwithgender, 'Driver should be:' %>
              <span class="asteriskField">*</span>
            </div>

            <div class="col-sm-8">
              <div class=" ">
                <div class="checkbox">

                  <label class="checkbox"><input id="okwithgender"  type="checkbox" value="Male" name="passengerride[okwithgender][]">Male</label>

                </div>
                <div class="checkbox">

                  <label class="checkbox"><input id="okwithgender"  type="checkbox" value="Female" name="passengerride[okwithgender][]">Female</label>

                </div>
                <div class="checkbox">

                  <label class="checkbox"><input id="okwithgender"  type="checkbox" value="Other" name="passengerride[okwithgender][]">Other</label>

                </div>
                <div class="checkbox">

                  <label class="checkbox"><input id="okwithgender"  type="checkbox" value="Any Gender" name="passengerride[okwithgender][]">Any Gender</label>

                </div>
              </div>
            </div>
          </div>

   ....
<% end %>

应用程序/控制器/ passengerrides_controllers:

  def passengerride_params
      params[:passengerride][:okwithgender] = params[:passengerride][:okwithgender].join(', ')
      params.require(:passengerride).permit(:origin, :destination ... :okwithgender)
  end

我想使用这个<%= f.check_box ... %>将解决问题,但我不确定如何编写相当于的东西 <input id="okwithgender" type="checkbox" value="Male" name="passengerride[okwithgender][]">

2 个答案:

答案 0 :(得分:1)

您应该开始为表单字段使用rails form helpers。 http://guides.rubyonrails.org/form_helpers.html

在您的情况下,我认为您应该尝试使用单选按钮实现此目的,因为任何人都会选择其中一个选项。

<%= f.radio_button :okwithgender, 'Male' %>
<%= f.label :okwithgender, 'Male', value: 'Male' %>
<%= f.radio_button :okwithgender, 'Female' %>
<%= f.label :okwithgender, 'Female', value: 'Female' %>
<%= f.radio_button :okwithgender, 'Other' %>
<%= f.label :okwithgender, 'Other', value: 'Other' %>
<%= f.radio_button :okwithgender, 'Any Gender' %>
<%= f.label :okwithgender, 'Any Gender', value: 'Any Gender' %>

要通过复选框多重选择来实现此目的,

f.check_box :okwithgender, {multiple: true}, 'Male'
f.label :okwithgender, 'Male', value: 'Male'
f.check_box :okwithgender, {multiple: true}, 'Female'
f.label :okwithgender, 'Female', value: 'Female'
f.check_box :okwithgender, {multiple: true}, 'Other'
f.label :okwithgender, 'Other', value: 'Other'
f.check_box :okwithgender, {multiple: true}, 'Any Gender'
f.label :okwithgender, 'Any Gender', value: 'Any Gender'

答案 1 :(得分:0)

我可能会同意使用Rails表单帮助程序更容易。但是,如果您不想使用它们,则必须提取值。所以,在你的/usr/local/psa/admin/sbin/httpdmng --reconfigure-domain [your domain] 中我会添加:

models/passengerride.rb

然后在您看来,每个输入都必须包含以下内容:

def okwithgender_separate
  okwithgender.split(',')
end

或者您可以将该功能添加到控制器助手中以进行清理。