Javascript RubyonRails将值重置回null

Javascript RubyonRails将值重置回null,javascript,ruby-on-rails,ruby,Javascript,Ruby On Rails,Ruby,我的看法如下: <div class="col-xs-3"> <%= f.select(:require_booking, get_advance_booking.collect {|p| [ p[:require_booking], p[:require_booking] ] }, {include_blank: false} , :class => 'form-control') %> </div> <div class="col-x

我的看法如下:

<div class="col-xs-3">
    <%= f.select(:require_booking, get_advance_booking.collect {|p| [ p[:require_booking], p[:require_booking] ] }, {include_blank: false} , :class => 'form-control') %>
</div>

<div class="col-xs-3">
    <%= f.text_field :require_days, :class => 'form-control advance-booking', :placeholder => 'How many days?', :disabled=>true%>
</div>
下面是我的
产品.rb
型号

class Product < ActiveRecord::Base
enum require_booking: {
        No: 0,
        Yes: 1
    }
end
类产品

现在的问题是,如果我选择
Yes
选项,文本字段将被启用,用户可以输入值。在编辑模式下,如果我选择一个选项
No
,如何将文本字段值设置回
NULL
并保存到db?目前,即使我设置了值
NO
,我仍然得到了以前设置的值。谢谢

您只能通过javascript更改select的值字段来实现这一点

例如:

请确保您的代码生成以下html:

<input type="select" value="Yes"></input>
<input type="text" value="EditValue"></input>

实际上,不能为表单输入指定空值。您可以将其设置为空“”。但这对你的情况没有帮助。您可能的解决方案是在选择“否”时禁用该字段。禁用的输入值将不会以表单形式提交。因此,基本情况将得到处理。 但是如果您正在更新,那么您可以在后端处理它。您可以在筛选之前添加

before_filter: check_for_require_days

def check_for_require_days
  params.merge!(require_days: nil) unless params[:require_days].present? 
end

这将检查该值是否已禁用,而不是以params的形式出现,以便将其设置为null

只需将:onchange=>“$”(“#产品_需要_天”).val(“”)添加到您的“需要_预订”选项中即可

'formcontrol'),:onchange=>“$”(“#产品"需要"天”).val(“”)”%

您应该使用javascript,因为它是客户端逻辑。
 $("input[type='select']").change(function() {
     $("input[type='text']").val(' '); });
before_filter: check_for_require_days

def check_for_require_days
  params.merge!(require_days: nil) unless params[:require_days].present? 
end
<%= f.select(:require_booking, get_advance_booking.collect {|p| [ p[:require_booking], p[:require_booking] ] }, {include_blank: false} , :class => 'form-control'), :onchange => "$('#product_require_days').val('')" %>