我的_form.html.erb
中有两个DropDowns(比如DropDown1和DropDown2)。
这是_form.html.erb
代码(我需要帮助的地方);
<div class="input-group">
<%= f.label :flight_id %><br>
<%= f.collection_select :flight_id, Flight.all, :id, :airline %>
</div>
<div class="input-group">
<%= f.label :seat_no %><br>
<%= f.text_field :seat_no %>
</div>
<div class="input-group">
<%= f.label :hotel_id %><br>
<%= f.collection_select :hotel_id, Hotel.all, :id, :hotel_name %>
</div>
<div class="input-group">
<%= f.label :room_no %><br>
<%= f.text_field :room_no %>
</div>
在这里,我想将seat_no
和room_no
转换为依赖Drop down
列表,分别取决于Flight
和Hotel
。
当我选择Flight
席位时,Flight
下拉列表中的Seat
可用,Room
下拉列表的逻辑相同。
提前致谢。
答案 0 :(得分:2)
Ruby对此不够。你需要使用javascript来实现你想要的。我们去座位吧。如果您希望根据航班加载座位,则应首先设置控制器操作,该操作将接受fligh_id并返回JSON格式的座位数组。我会将此控制器放入命名空间并将其放在app/controllers/ajax/seats_controller.rb
:
class Ajax::SeatsController < ApplicationController
def index
@seats = Seat.where(fligh_id: params[:flight_id])
render json: @seats
end
end
routes.rb
中的:
namespace :ajax do
resources :seats_controller, only: :index
end
然后重写座位输入,如:
<div class="input-group" style="display: none">
<%= f.label :seat_no %><br>
<%= f.text_field :seat_no %>
</div>
app/assets/javascripts/[your_controller].js
中的:
$('#[your_flight_dropdown_html_id]').onchange(function() {
$.getJSON('/ajax/seats', { flight_id: $('#[your_flight_dropdown_html_id]').val(), function(data) {
// destroy all existing seat options
// loop through data and fill in new seat options
// Make seats dropdown visible
}
});
这是简短的描述我将如何处理你的任务。你可以为另一对下拉菜单做同样的事情。也许我的代码中有一些错误(没有测试过),但至少你会对如何前进有共同的理解。
如果需要任何帮助,请撰写评论