2011年9月18日日曜日

rails3.1時代のautocompleteは(一部駄目だし)

railsを始めて触った時は、圧倒的に簡単に利用できるautocomplete機能に驚かされたものです(あ~懐かしい。。)。
あるバージョンからautocompleteはplugin側に外れたのですが、rails3時代にはどのplugin(gem)が利用されているんでしょうか?
rails3.1からはjqueryが標準になったので、rails3 - jquery - autocompleteという切り口で探してみました。
すると、そのまんまなgemがありました。
https://github.com/crowdint/rails3-jquery-autocomplete

■インストール

Gemfileに
gem 'rails3-jquery-autocomplete'

でinstall
$ bundle install

次にコード生成して
rails generate autocomplete:install

# generatorのrails3.1対応はまだみたいなのでautocomplete-rails.jsは、public/assets/javascripts
# に手動コピーしましょう。

jsを読み込みましょう
javascript_include_tag "autocomplete-rails.js"

application.jsでjquery-uiを読み込む用にしましょう。
//= require jquery-ui

後defaultではcssがしょんぼりなので、public/assets/stylesheetsに
https://raw.github.com/crowdint/rails3-jquery-autocomplete-app/master/public/stylesheets/jquery-ui-1.8.2.custom.css
をおきましょう。

■利用方法
controllerに
class ProductsController < Admin::BaseController
  # モデル名、フィールド名
  autocomplete :brand, :name
end

routes.rbに
resources :products do
  get :autocomplete_brand_name, :on => :collection
end

最後にviewに
<%= form_for @product do |f| %>
  <%= f.autocomplete_field :brand_name, autocomplete_brand_name_products_path %>
<% end %>

ね、(そこそこ)簡単でしょう!

■いくつか残念な点

調べてみて感じた残念な点
  1. rails3.1対応はまだ
  2. rspec-request用のサポートが欲しい
  3. label/valueに適応されるmethodが同じ
  4. term以外の動的要素に対応できない
ぼやいててもしょうがないので、やれる事はやろう(続く)

2011/09/18 上記4に対応してみました。https://github.com/kennyj/rails3-jquery-autocomplete
gem 'rails3-jquery-autocomplete', :git => git://github.com/kennyj/rails3-jquery-autocomplete.git
で使えると思います。

2011/09/18 上記1にも対応してみました(rails3.1 branch) 上記に, :branch => 'rails3.1' を追加すると利用できるはずです。

2011/09/19 上記2はspec_helper.rbで、require 'steak/autocomplete' して、config.include Steak::Autocomplete, :type => :request すればrspec-requestsでも動きました。

0 件のコメント:

コメントを投稿