记住Rails中的动态选择选项

时间:2015-09-16 17:51:44

标签: ruby-on-rails ruby

型号:

用户创建活动,每个活动需要一个Court位置,然后是House位置,House的价值取决于Court的价值,例如:

选择Court A,将House返回为A1,A2,A3

选择Court B,将House返回为B1,B2,B3

以事件控制器形式:

def new
  @event = current_user.events.build(event_params)
  @courts = Court.all
  @houses = House.where("court_id = ?", Court.first.id)
end

def edit
  @event = Event.find(params[:id])
  @courts = Court.where(:id => @event.court_id)
  @houses = House.where(:id => @event.house_id)
end   

以观看形式

<%= f.label 'Event Location' %>
<%= f.select :court_id, options_for_select(@courts.collect { |court| [court.name, court.id] }, 1), {}, { id: 'courts_select' } %>
<%= f.select :house_id, options_for_select(@houses.collect { |house| [house.name, house.id] }, 0), {}, { id: 'houses_select' } %>

使用Javascript:

$(function() {
  return $(document).on('change', '#courts_select', function(evt) {
    return $.ajax('/events/update_houses', {
      type: 'GET',
      dataType: 'script',
      data: {
        court_id: $("#courts_select option:selected").val()
      },
      error: function(jqXHR, textStatus, errorThrown) {
        return console.log("AJAX Error: " + textStatus);
      },
      success: function(data, textStatus, jqXHR) {
        return console.log("Dynamic court select OK!");
      }
    });
  });
});

现在,当用户创建事件时,此功能正常,但是当他们想要编辑时,Court和House Select仅显示1个值。这是因为在编辑控制器中 where()只返回1个值。如何更改编辑控制器代码,以便在编辑表单中返回选项列表并记住用户的选择

1 个答案:

答案 0 :(得分:1)

对于初学者,您希望为当前选定的法院提供所有法院和相应的房屋。

def edit
  @event = Event.find(params[:id])
  @courts = Court.all
  @houses = House.where(:court_id => @event.court_id)
end

然后您希望您的选择从下拉列表中选择适当的值。而不是:

<%= f.select :court_id, options_for_select(@courts.collect { |court| [court.name, court.id] }, 1), {}, { id: 'courts_select' } %>

类似的东西:

<%= f.select :court_id, options_for_select(@courts.collect { |court| [court.name, court.id] }, @event.court_id), {}, { id: 'courts_select' } %>

...为House选择冲洗并重复

希望有所帮助!