我已经完成了N个用于在rails中创建动态下拉列表的解决方案,但似乎没有任何效果。
我有一个典型的州和城市模型,我不想使用卡门。
这是我的模特: -
Market.rb
class Market < ActiveRecord::Base
attr_accessible :state, :cities_attributes
has_and_belongs_to_many :users
has_many :cities, :dependent => :destroy
accepts_nested_attributes_for :cities
validates :state, :presence => true, :uniqueness => true
end
City.rb
class City < ActiveRecord::Base
attr_accessible :city
belongs_to :market
has_and_belongs_to_many :users
end
in devise / registrations / new(我希望用户在注册时选择州和城市)
%li
=f.collection_select :city, Market.all,:id, :state, html_options = { :class => "custom_textarea"}
%li
=render "devise/registrations/cities", :f => f
_cities.html.haml partial
-unless cities.blank?
=f.collection_select( :city, @cities, :id, :cities)
registrations_controller.rb
def update_city_select
@cities = City.where(:country_id => params[:id])
render :partial => "cities", :locals => {:cities => @cities}
end
我想在用户选择州并填充相关城市后更改城市列表。
我怎样才能做到这一点?
答案 0 :(得分:2)
您必须在视图中使用ajax,其中包含状态下拉列表:
$("#stateDropdown").change(function(){
$.get("controller/update_city_select.html?id="+$("#stateDropdown").val(),
function(data){ $("#cityDropdownDiv").html(data); } );
});
这会调用您的操作,并将div的内容替换为城市的新下拉列表。
对你的部分:
#cityDropdownDiv
-unless @cities.blank?
= collection_select( :market, :city, @cities, :id, :cities)
这样,渲染部分时不需要添加:f => f
参数。
您应该在html_option部分的下拉列表中添加一个ID(我假设为“stateDropdown”)。
答案 1 :(得分:1)
另外一个非常有帮助的教程,我想这将有助于任何希望实现依赖下拉列表的人http://www.petermac.com/rails-3-jquery-and-multi-select-dependencies/