Rails将生成的js参数从表单传递到控制器
Rails pass generated js params from form to controller
我有一个form_for与2个日期字段和1个整数。
- :start, id: "start"
- :end, id: "end"
- :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 %>
控制器动作new and create:
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
看看你的表单,注意到这个:
<div class="large-10 columns left"><%= f.text_field :number_of_days, disabled: true, id: 'number_of_days' %></div>
你有禁用: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>
相关文章:
- angularjs-控制器在表单提交时未调用
- 如何将数据从 HTML 表单提供给控制器
- 表单提交未到达控制器方法
- Symfony2将ajax请求数据传递给表单呈现控制器
- 如何正确清除AngularJS控制器输入无效的表单
- 控制器作为搜索输入表单的语法
- AngularJS表单使用控制器和服务发布
- 如何将表单数据从jQuery获取到ASP.NET控制器
- 需要将表单值从视图传递到AjaxSubmit上的控制器表单
- Codeigniter Jquery Ajax,Can't将控制器中的数据访问回html表单
- 如何将表单值从jquery ajax传递到codeigniter控制器
- 从控制器内部获取表单数据
- 角度表单双重发布(html中没有另一个ng控制器)
- AngularJS嵌套控制器 - 表单未定义
- 将序列化表单以及一些其他数据发送到控制器
- AngularJS 模态对话框表单对象在控制器中未定义
- 将表单发布序列化为控制器
- Angularjs 两个表单用于同一个控制器
- 如何将表单输入数据从数据列表传递到我的角度控制器
- 如何在MVC中返回JSON数据表单控制器到jsp