將下面看作是自行車出租。有人填寫表格並獲得分配給他們的自行車,他們可以租借一段時間。如何使用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