型号:
用户创建活动,每个活动需要一个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个值。如何更改编辑控制器代码,以便在编辑表单中返回选项列表并记住用户的选择
答案 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选择冲洗并重复
希望有所帮助!