轨。 Dropdown1使用Ruby on Rails

时间:2017-11-22 07:59:28

标签: jquery ruby-on-rails ruby ruby-on-rails-3

我的_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_noroom_no转换为依赖Drop down列表,分别取决于FlightHotel。 当我选择Flight席位时,Flight下拉列表中的Seat可用,Room下拉列表的逻辑相同。

提前致谢。

1 个答案:

答案 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
  }
});

这是简短的描述我将如何处理你的任务。你可以为另一对下拉菜单做同样的事情。也许我的代码中有一些错误(没有测试过),但至少你会对如何前进有共同的理解。

如果需要任何帮助,请撰写评论