Rails - 动态下拉列表,包含两个模型类别&子类别

时间:2016-06-06 22:40:04

标签: javascript ruby-on-rails dynamic drop-down-menu

我正在开展一个小项目,人们可以向社区发送“产品搜索消息”。因此,他们需要选择他们搜索到的产品属于哪个类别和子类别。要选择它,我只需要两个下拉列表,而第二个下拉列表根据第一个选择动态变化。 我想这是一项简单的任务,我已经觉得接近解决方案了。 我有两个模型(一个用于类别,一个用于子类别),它们具有一对多的关系。

到目前为止,这是我的代码:

my search_controller

def index
  @subcategory = Subcategory.find_by("id = ?", params[:subcategory_id])
end

def new
      @search = Search.new
      @categories = Category.all
      @subcategories = Subcategory.where("category_id = ?", Category.first.id)    
end

def update_subcategories
    @subcategories = Subcategory.where("category_id = ?", params[:category_id])
    respond_to do |format|
      format.js
    end
end

def create 
  @search = current_user.searches.build(search_params) 
  @categories = Category.all
  if @search.save 
    redirect_to searches_path
  else 
    render 'new' 
  end 
end

private 
def search_params 
    params.require(:search).permit(:title, :category_id, :subcategory_id) 
end

部分路线.rb

  get 'searches/update_subcategories', as: 'update_subcategories'
  get 'searches/new'

搜索/新页面上的视图

    <%= form_for(@search, method: :get ) do |f| %>  
<%= f.text_area :title %>
<%= f.select :category_id, options_for_select(@categories.collect { |category| [category.name.titleize, category.id] }, 1), {}, { id: 'categories_select' } %>

<%= f.select :subcategory_id, options_for_select(@subcategories.collect { |subcategory| [subcategory.name.titleize, subcategory.id] }, 0), {}, { id: 'subcategories_select' } %>

<%= f.submit "Create" %> 
<% end %>

部分:views / subcategory /

<option value="<%= subcategory.id %>"><%= subcategory.name.titleize %></option>

和app / assets / javascripts / search.js.coffee

$ ->
  $(document).on 'change', '#categories_select', (evt) ->
    $.ajax 'update_subcategories',
      type: 'GET'
      dataType: 'script'
      data: {
        category_id: $("#categories_select option:selected").val()
      }
      error: (jqXHR, textStatus, errorThrown) ->
        console.log("AJAX Error: #{textStatus}")
      success: (data, textStatus, jqXHR) ->
        console.log("Dynamic category select OK!")

和app / views / searching / update_subcategories.js.coffee:

$("#subcategories_select").empty()
  .append("<%= escape_javascript(render(:partial => @subcategories)) %>")

没有错误,但第二个下拉列表不会更改。我错过了什么?

我发现了这种方式:https://kernelgarden.wordpress.com/2014/02/26/dynamic-select-boxes-in-rails-4/

我感谢任何帮助!

0 个答案:

没有答案