Rails中的多选标记

时间:2014-08-01 06:22:25

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

我试图在Rails中实现多级下拉列表 我的数据库中有三个表。

vehicle_make.rb

class VehicleMake < ActiveRecord::Base
  validates_uniqueness_of :make
  has_many :appointments

end

vehicle_model.rb

class VehicleModel < ActiveRecord::Base
  validates_uniqueness_of :model
  has_many :appointments

end

vehicle_make_model.rb

class VehicleMakeModel < ActiveRecord::Base
  validates_uniqueness_of :vehicle_make_id, :scope => :vehicle_model_id
end

我试图在appointmentments.html.rb中实现多个下拉列表 在选择车辆模型时,只应加载相应的..

<%= f.select :vehicle_make_id, options_for_select(vehicle_make.map {|s| [s.make, s.id]}, appointment.vehicle_make_id), {}, {class: "form-control"} %>

在我的js中我有..

$('#appointment_vehicle_make_id').on('change', function() {
    var vehicle_make_id = this.value;
    $.ajax({
        url : '/appointments/update_models',
        type : 'GET',
        data : {
            make_id : vehicle_make_id
        },
        success : function(response) {
            console.log(response);
        }
    });
});

这是我的控制器方法。

  def update_models
    @vehicle_models = VehicleModel.all
    @model_ids = []
    @selected_vehicle_models = VehicleMakeModel.where(vehicle_make_id: params[:make_id]).order(:vehicle_model_id) unless params[:make_id].blank?
    @selected_vehicle_models.each do |t|
      @model_ids << t.vehicle_model_id
    end
    respond_to do |format|
      format.html { render layout: false }
      format.js
    end

我有与上述操作相关联的名为update_models.html.erb的html页面。

<%= select_tag :vehicle_model_id, options_for_select(@model_ids.map {|s| [s.model, s.first.id]}, nil), {}, {class: "form-control"} %>

我在终端说

时收到错误
ActionView::Template::Error (wrong number of arguments (4 for 1..3)):
    1: <%= select_tag :vehicle_model_id, options_for_select(@model_ids.map {|s| [s.model, s.first.id]}, nil), {}, {class: "form-control"} %>

我被困在这里。我不知道如何从这里开始..请帮助

1 个答案:

答案 0 :(得分:1)

在您的控制器操作update_models中,您正在尝试呈现js,因此它正在尝试查找名为update_models.js.erb的模板。

您可以尝试使用以下代码替换respond_to

respond_to do |format|
  format.json { render :json => @model_ids }
end

之后,您需要在ajax成功回调中解析这些数据