Ruby on Rails将值重置为null

时间:2016-04-21 07:00:46

标签: 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-xs-3">
    <%= f.text_field :require_days, :class => 'form-control advance-booking', :placeholder => 'How many days?', :disabled=>true%>
</div>

这是我的application_helper.rb

  def get_advance_booking
    ret = [{:require_booking => 'Yes'},{:require_booking => 'No'}]
  end

以下是我的product.rb型号

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

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

3 个答案:

答案 0 :(得分:0)

你只能通过javascript更改select的值字段来实现。

示例:

假设您的代码生成以下html:

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

要解决这个问题,你需要一个像这样的javascript(jQuery)代码:

 $("input[type='select']").change(function() {
     $("input[type='text']").val(' '); });

答案 1 :(得分:0)

实际上,您无法将Null值分配给表单输入。你可以把它设置为空''。但这对你的情况没有帮助。您可能的解决方案是在选择“否”时禁用该字段。禁用的输入值不会以表格形式提交。因此基本情况将被处理。 但是如果你正在更新,那么你可以在后端处理它。您可以在过滤前添加。

before_filter: check_for_require_days

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

这将检查该值是否被禁用,而不是形式为params,因此它将其设置为null。

答案 2 :(得分:0)

只需添加:onchange =&gt; &#34; $(&#39; #product_require_days&#39;)。val(&#39;&#39;)&#34; 到您的&#34; require_booking&#34;选择

<%= 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('')" %>