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