将下面看作是自行车出租。有人填写表格并获得分配给他们的自行车,他们可以租借一段时间。如何使用ajax和jquery显示基于用户输入的选择
我遇到的问题是我试图向他们提交表单时想要租用自行车的人提供什么样的自行车。以下是我使用ajax的尝试。我没有错误,但我的选择没有更新。
下面
def new
@bikes = Bike.available_based_on_request_date(params[:Borrow_date], params[:Return_date])
@new_request = Request.new
end
请求的控制器方法创建下面方法(与暂时的解决办法,即重新加载有大约可用性警告的形式。)在请求控制器
def create
@request = Request.new(request_params)
available_bikes = @request.new_request(current_user.id)
if (available_bikes >= @request.number_of_bikes_wanted) && @request.save
redirect_to root_path
else
flash[:warning] = "You have requested more bikes than available. There are only #{available_bikes} bikes available"
redirect_to new_request_url
end
end
PARAMS
def request_params
params.require(:request).permit(:Borrow_time, :Borrow_date,
:Return_date, :Return_time,
:number_of_bikes_wanted, bike_ids: [])
end
new.html.erb查看
<div class="form" align = "center">
<%= render 'form.js.erb' %>
</div>
_form.js.erb下面
<script type="text/javascript">
$(document).ready(function() {
$('.my-date').on('change', function() {
var data = {}
$('.my-date').each(function() {
if($(this).val()) {
data[$(this).attr("id")] = $(this).val();
}
});
if(Object.keys(data).length > 1) {
$.ajax({
type: "POST",
url: <%= new_request_path %>,
data: data
});
}
});
});
var options = "";
<% @bikes.each do |bike| %>
options += "<option value='<%= bike.id %>'><%= bike.name %></option>"
<% end %>
$('#request_number_of_bikes_wanted').html(options);
</script>
<div class="block-it" align=center>
<br>
<%= form_for @new_request do |request| %>
<%= request.label :Borrow_date, 'Borrow on' %>
<%= request.date_field :Borrow_date, id: 'Borrow_date', class: 'my-date', min: Date.today, :required => true %>
<%= request.label :Borrow_time, 'Borrow at' %>
<%= request.time_field :Borrow_time, value: '10:00', min: '9:00 AM', max: '4:30 PM', default: '10:00 AM', :ignore_date => true, :required => true %>
<br><br>
<%= request.label :Return_date, 'Return On' %>
<%= request.date_field :Return_date, id: 'Return_date', class: 'my-date', min: Date.today, :required => true %>
<%= request.label :Return_time, 'Return at' %>
<%= request.time_field :Return_time, value: '10:00', min: '9:00 AM', max: '4:30 PM', default: '10:00 AM', :ignore_date => true, :required => true %>
<br><br>
<br><br>
<%= request.label :NumberOfBikesWanted, 'Number of bikes' %>
<%= request.select :number_of_bikes_wanted, %w(select_bike), :required => true %>
<br>
<%= request.submit 'Submit' %>
<%= request.submit 'Reset', :type => 'reset' %>
<% end %>
<br>
</div>
你错过了'.js.erb'视图,应该是'new.js.erb',你可以发布它吗?虽然我会推荐使用不同的端点(不是'new')来获取自行车。你可以使用自定义动作或创建一个新的控制器(两种方法都可以正常工作)。 – Gerry
还有一件事,你的表单应该是'_form.html。erb“,因为它是渲染'html'。 '.js'模板只能用于取得自行车的端点(即动作)。 – Gerry
我还是有点困惑,对不起!所以,如果我正在使用资源:请求,并且这是创建新请求的表单。我想在铁路线路上重新映射吗?因为默认情况下它被称为request/new.html.erb,并带有new作为操作。如何将其更改为路由中的new.js.erb。如果new也是错误的方法,我是否为js.erb视图在_form.html.erb中渲染了一个部分?如果我全部倒退,我很抱歉。试图让这个正确。我感谢您的帮助! *编辑*添加new.html.erb视图到OP – codingdraculasbrain