rails3-jquery-autocompleteをスネークケースなmodelで使う

はじめに、modelでスネークケースを使うのは止めておいた方がいい。いろいろと面倒なのだ。
 
参考:Rails 3でのオートコンプリートを手軽に実現する rails3-jquery-autocomplete
 
Rails3.1系です。
 

インストール

Gemfile
gem 'rails3-jquery-autocomplete'

 

ターミナル
bundle install

 

app/assets/javascripts/application.js
//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require autocomplete-rails
#他のjQueryプラグインが入っていると重複する可能性あり

 

コントローラー名とモデル名

app/model/media_rental.rb
class MediaRental < ActiveRecord::Base

 

app/controllers/mediarentals_controller.rb
class MediarentalsController < ApplicationController

こんなヘンテコリンな状態なのでカオスになる。
 

コントローラーの設定

model名とcolumn名を指定、fullを付けてcolumnの前方一致以外も対象にする

autocomplete :media_rental, :title, :full=>true

routes.rbの編集

controller名を指定、getにmodel名とcolumn名を指定(onlyで使用箇所を限定)

resources :mediarentals, :only=>['autocomplete_media_rental_title'] do
get :autocomplete_media_rental_title, :on=> :collection
end

検索フォーム

オートコンプリートを仕込むところ、new.html.erbとか
f.autocomplete_field :「column名」, autocomplete_「model名」_「column名」_「controller名」_path

form_for :user do |f|
f.autocomplete_field :title, autocomplete_media_rental_title_mediarentals_path
end

 

検索結果が選択されたとき

new.html.erbの上の方に書いておく

既定の結果以外が欲しい

上記のnew.html.erbで取得できるのは2つ

alert(data.item.value);
alert(data.item.id);

コレ以外の値が欲しいときはcontrollerに追記する

autocomplete :media_rental, :title, :full=>true, :extra_data=>[:number]

するってーと他の値もjQueryで取得できる。

alert(data.item.number);

https://github.com/crowdint/rails3-jquery-autocomplete