如何使用下拉列表更新/预填充Rails表单

时间:2016-12-11 05:09:58

标签: ruby-on-rails ruby forms

我正在尝试创建一个带有下拉列表的表单,用户可以创建一个新对象,例如"创建新"被选中,或者他们可以选择从之前创建的对象中选择,这些对象应该使用相应的数据预填充表单。

目前,我只需要为每个循环填充下拉列表,其中包含先前在表单外部创建的对象,以及创建新对象的表单。

如何使此表单动态化,以便在选择以前选择的对象时,表单预填充并允许编辑?

2 个答案:

答案 0 :(得分:1)

您必须向自定义路由发送AJAX GET请求,然后执行响应json格式的控制器操作,并根据该GET请求中传递的参数返回一个集合。比如,您正在根据选定的品牌加载可用的车型:

路线:

get '/get_models/:make_id', to: 'car_makes#available_models'

控制器动作:

def available_models
  @models = Model.where(id: ids)
  respond_to do |format|
    format.json { render json: @models } 
  end
end 

AJAX请求:

var fetchModels = function(makeId){
  $.ajax({
    method: 'GET',
    url:     '/get_models/' + makeId,
    success: function(data) {
      ...
      var target = $('select#car_models');  // field to which options are appended
      $.each(data, function(id, model){
        $(target).append(
          $('<option>').text(model).attr('value', id) // populate options             );
      });
    }
    ...
  });
}

然后将AJAX请求设置为触发父.change字段中的select事件:

$('select#car_makes').change(function(){
   var makeId = $(this).val();
   fetchModels(makeId); 
});

有许多资源可以解释实现此目的的其他方法:

答案 1 :(得分:0)

所以我最终循环遍历选择下拉列表的所有潜在选项,并使用所有可能的选项循环编辑rails表单,并使用jQuery onchange来显示/隐藏正确的html。

这对我来说并不是一个非常好的解决方案,特别是因为它必须每次都加载所有选项的html ..但我不知道还有什么可做,而且有效。

如果有人想要更好的解决方案,请告诉我们:)