【问题标题】:Rails pass generated js params from form to controllerRails 将生成的 js 参数从表单传递到控制器
【发布时间】:2014-06-20 04:56:19
【问题描述】:

我有一个带有 2 个日期字段和 1 个整数的 form_for。

  • :开始,id:“开始”
  • :结束,id:“结束”
  • :number_of_days, id: "number_of_days"

我的js:

$(document).ready(function(){
  $("#start, #end").on('change', function () {
    var start = $('#start').datepicker('getDate');
    var end = $('#end').datepicker('getDate');
    var duration = (end.getDate() - start.getDate())/1000/60/60/24;

    $("#number_of_days").val(duration);
  });
});

变量“duration”的值在表单的 :number_of_days 字段中显示得很好,但是 在提交时如何继续将生成的 :number_of_days 传递给控制器表格?

谢谢

编辑: form_for:

<%= form_for(@vacation) do |f| %>  
  <div class="row">
    <div class="large-2 columns"><%= f.label :start, "Starts On" %></div>
    <div class="large-10 columns left"><%= f.text_field :start, data:{ type: 'date'}, id: 'start' %></div>
    </div>

    <div class="row">
      <div class="large-2 columns"><%= f.label :end, "Ends On" %></div>
      <div class="large-10 columns left"><%= f.text_field :end, id: 'end' %></div>
    </div>
    <div class="row">
      <div class="large-2 columns"><%= f.label :number_of_days, "Duration In Days" %></div>
      <div class="large-10 columns left"><%= f.text_field :number_of_days, disabled: true, id: 'number_of_days' %></div>
    </div>
    <div class="row">
      <div class="large-10 large-offset-2 columns">
      <%= f.submit nil, class: 'button small radius success' %>
      </div>
    </div>
 <% end %>

控制器动作新建和创建:

def new
  @vacation = Vacation.new
end

def create
  @vacation = Vacation.new(vacation_params)
  @vacation.user = current_user
  @vacation.number_of_days = params[:number_of_days]
  respond_to do |format|
    if @vacation.save
      format.html { redirect_to @vacation, notice: 'Vacation was successfully created.' }
    else
      format.html { render action: 'new'}
    end
  end
end

私下允许参数:

def vacation_params
  params.require(:vacation).permit(:start, :number_of_days, :end)
end

【问题讨论】:

  • 您可以尝试找出与 ruby​​ 的区别...您已经拥有了吗?
  • 在我的项目中实际上是要求在提交表单之前立即在指定的text_field中显示天数..
  • number_of_days 值是否不存在于控制器的 params 哈希中?
  • 啊好吧!请问可以上传form_for代码吗?
  • 如果你的意思是强大的参数,是的,它就在那里。但是当我通过 rails 控制台检查时,它显示为 nil。

标签: javascript jquery ruby-on-rails ruby ajax


【解决方案1】:

刚刚查看了您的表单并注意到了这一点:

<div class="large-10 columns left"><%= f.text_field :number_of_days, disabled: true, id: 'number_of_days' %></div>

您为此字段disabled: true,因此当您提交表单时,它的值不会被提交。您需要更新您的 js 文件:

$(document).ready(function(){
  $("#start, #end").on('change', function () {
    var start = $('#start').datepicker('getDate');
    var end = $('#end').datepicker('getDate');
    var duration = (end.getDate() - start.getDate())/1000/60/60/24;

    $("#number_of_days").val(duration).attr("disable","false");
  });
});

更好的解决方案是让您的字段只读 而不是禁用它。你可以这样做:

<div class="large-10 columns left"><%= f.text_field :number_of_days, readonly: true, id: 'number_of_days' %></div>

【讨论】:

  • 我试过你的建议,但没有奏效,我什至从文本字段中删除了“禁用:真”,但它仍然不会这样做,只读仍然无法保存..
  • 从字段中删除 disable: true 后你得到什么参数?
  • "start" 和 "end" 谁有值,然后是 "number_of_days" 的值:" " ...我猜禁用或标记为只读不会影响传递数据..跨度>
  • @mobylak 了解一次上传所有代码的必要条件?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 1970-01-01
  • 1970-01-01
  • 2015-07-29
  • 1970-01-01
  • 2016-05-11
  • 1970-01-01
相关资源
最近更新 更多