初めての Rast (5)
Rails プロジェクトディレクトリを生成。
~/lab$ rails rast-test ~/lab$ cd rails ~/lab$ script/server & ... ~/lab$ w3m http://172.16.133.33:3000/
とりあえず Rails 自体は OK。
設定はこんなもんでヨロシか?
$ vi config/database.yml development: adapter: postgresql database: rastdb host: localhost username: rastuser password: rastuser-passwd
model と controller を作って、
$ script/generate model Item exists app/models/ ... (略) ... create test/fixtures/items.yml $ script/generate controller Item exists app/controllers/ ... (略) ... create app/helpers/item_helper.rb
DB の調子を見ておくか。
$ vi app/controllers/item_controller.rb class ItemController < ApplicationController scaffold :item end
http://servername:3000/item/ にアクセス。ふむ、OK。
画像張りたいけど、はてなは一日一枚制限みたいなので、雰囲気だけ〜
Listing items
Name Description
メンドクサイので generate scaffold で一括ファイル生成〜。
$ script/generate scaffold Item dependency model exists app/models/ ... (略) ... create app/views/items/_form.rhtml
(アクセスする URL が変わるので注意。http://servername:3000/items/)
UTF-8 で行くと決めたので、app/views/layouts/items.rhtml の
... に以下を詰めておく。<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
や〜っと、Rast に辿り着いた〜。acts_as_rast_indexed - Journal InTime(2005-07-22) の通りに入力していくだけ。
Rast モジュールを配置して〜
$ mkdir -p lib/active_record/acts $ cp ~/pkg/rast/rast_indexed.rb lib/active_record/acts/
ActiveRecord::Base にモジュール注入! class_eval 万歳!
$ vi config/environment.rb # Include your app's configuration here: require "active_record/acts/rast_indexed" ActiveRecord::Base.class_eval do include ActiveRecord::Acts::RastIndexed end
このモデルはインデックスしますよ〜宣言。
$ vi app/models/item.rb class Item < ActiveRecord::Base acts_as_rast_indexed end
list のヴューに検索テキストボックスを入れなきゃね。
$ vi app/views/items/list.rhtml <%= start_form_tag :action=>'search' %> <%= text_field "keyword", nil, "size" => 32 %> <%= submit_tag 'Search' %> <%= end_form_tag %> <br />
コントローラーに検索アクションを追記。
$ vi app/controllers/items_controller.rb def search @keyword = params[:keyword] @items = Item.find_by_rast(["?", @keyword]) end
何も指定しなくても全フィールド検索してくれるのが良いな。
こった検索がしたい方は File Not Found | NaCl を参照のこと。
検索結果画面はこんなもんで。
$ vi app/views/items/search.rhtml <h1>Searched items</h1> Kerword: <strong><%= @keyword %><strong> <table> <tr> <% for column in Item.content_columns %> <th><%= column.human_name %></th> <% end %> </tr> <% for item in @items %> <tr> <% for column in Item.content_columns %> <td><%=h item.send(column.name) %></td> <% end %> <td><%= link_to 'Show', :action => 'show', :id => item %></td> <td><%= link_to 'Edit', :action => 'edit', :id => item %></td> <td><%= link_to 'Destroy', {:action => 'destroy', :id => item}, :confirm => 'Are you sure?' %></td> </tr> <% end %> </table> <%= link_to 'Back', :action => 'list' %>
一覧:
Listing items
Name
Description
abcde
あいうえおかきくけこさしすせそ
Show
Edit
Destroy
fghij
たちつてとなにぬねのはひふへほ
Show
Edit
Destroy
klmno
まみむめもや ゆ よらりるれろ
Show
Edit
Destroy
検索結果:
Searched item
Kerword: ひふへ
Name
Description
fghij
たちつてとなにぬねのはひふへほ
Show
Edit
Destroy
でけたでけた〜。
すんげぇ簡単。あっけないなぁ。簡単なテストしかしてないけど軽快。(もちょっと長文のテストしてるが省略)
アレに使おう。