以下是我的观点:
<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
,我仍然可以获得之前设定的值。谢谢!
答案 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('')" %>