Thisselect2
jquery库看起来很棒。有一个Rails gem,但它是非常轻的文档。 我想使用自动完成功能生成一个简单的多个下拉菜单。我怎么做?如何在simple_form中使用select2-rails?
这是我的电话simple_form_for:
<%= f.input_field :neighborhood_names, url: autocomplete_neighborhood_name_searches_path, as: :autocomplete, data: { delimiter: ',', placeholder: "Where do you want to live?"}, multiple: true, id: "selectWhereToLive", class: "span8" %>
我已经成功安装了select2-rails
宝石,但并不完全知道如何得到它的工作。
我加入到我的home.js.coffee
文件:
jQuery ->
$('#selectWhereToLive').select2()
和我得到这个错误:
Uncaught query function not defined for Select2 selectWhereToLive
的思考?
编辑1:
上面simple_form_for
呼叫被制造该HTML:
<input class="autocomplete optional span8" data-autocomplete="/searches/autocomplete_neighborhood_name" data-delimiter="," data-placeholder="Where do you want to live?" id="selectWhereToLive" multiple="multiple" name="search[neighborhood_names][]" size="30" type="text" url="/searches/autocomplete_neighborhood_name" value="" />
指示id
属性正被适当地设置。
编辑2 - 更新
由于@moonfly建议,我尝试添加as: :select
到f.input_field
- 都与as: :autocomplete
包括在内,不包括在内。
没有as: :autocomplete
生成的HTML是这样的:
<input name="search[neighborhood_names][]" type="hidden" value="" /><select class="select optional span8" data-delimiter="," data-placeholder="Where do you want to live?" id="selectWhereToLive" multiple="multiple" name="search[neighborhood_names][]" url="/searches/autocomplete_neighborhood_name"><option value="true">Yes</option>
<option value="false">No</option></select>
它预先填充2个选项值 '是' 和 '否'。不太清楚为什么,但这就是它的作用。
更新
所以我改变了jQuery选择寻找input#ID
,忘了。所以我把它设置回来,现在它正在生成选择框 - 但它是给我的那些2是&没有选项。不太确定它为什么这样做。它不会从我的url
属性中返回值。
编辑3
@哈里什 - 谢蒂的建议似乎是工作。但是现在,在通过自动完成和使用select2菜单成功找到记录后,它将绕过我在search.rb
模型上的设置方法。
基本上,我想要发生的是,一旦用户完成填写表格并且我有他们想要的社区的所有ID /名称,我想为这些ID在search_neighborhoods
中创建一个新记录。
因此,这些都是方法,我有:
Search.rb
def neighborhood_names
neighborhoods.map(&:name).join(',')
end
# we need to put [0] because it returns an array with a single element containing
# the string of comma separated neighborhoods
def neighborhood_names=(names)
names[0].split(',').each do |name|
next if name.blank?
if neighborhood = Neighborhood.find_by_name(name)
search_neighborhoods.build neighborhood_id: neighborhood.id
end
end
end
我SearchController.rb
def autocomplete_neighborhood_name
@neighborhood = Neighborhood.select("id, name").where("name LIKE ?", "#{params[:name]}%").order(:name).limit(10)
respond_to do |format|
format.json { render json: @neighborhood , :only => [:id, :name] }
end
end
这是一个请求是什么样子,现在 - 这表明正在创建无记录:
Started POST "/searches" for 127.0.0.1 at 2013-03-06 04:09:55 -0500
Processing by SearchesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"7SeA=", "search"=>{"boro_id"=>"", "neighborhood_names"=>"1416,1394", "property_type_id"=>"", "min_price"=>"", "max_price"=>"", "num_bedrooms"=>"", "num_bathrooms"=>""}}
Neighborhood Load (0.5ms) SELECT "neighborhoods".* FROM "neighborhoods" WHERE "neighborhoods"."name" = '1' LIMIT 1
(0.3ms) BEGIN
SQL (0.8ms) INSERT INTO "searches" ("amenity_id", "boro_id", "created_at", "keywords", "listing_type_id", "max_price", "min_price", "neighborhood_id", "num_bathrooms", "num_bedrooms", "property_type_id", "square_footage", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13) RETURNING "id" [["amenity_id", nil], ["boro_id", nil], ["created_at", Wed, 06 Mar 2013 09:09:55 UTC +00:00], ["keywords", nil], ["listing_type_id", nil], ["max_price", nil], ["min_price", nil], ["neighborhood_id", nil], ["num_bathrooms", nil], ["num_bedrooms", nil], ["property_type_id", nil], ["square_footage", nil], ["updated_at", Wed, 06 Mar 2013 09:09:55 UTC +00:00]]
(32.2ms) COMMIT
Redirected to http://localhost:3000/searches/29
毕竟,Edit3是另一个问题。我建议你发表另一个问题。 我想你需要在控制器上允许neighbor_names。 – kuboon 2015-11-20 06:20:04