初めての 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

New item


メンドクサイので 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



New item


検索結果:

Searched item

Kerword: ひふへ













Name Description
fghij たちつてとなにぬねのはひふへほ Show Edit Destroy

Back

でけたでけた〜。
すんげぇ簡単。あっけないなぁ。簡単なテストしかしてないけど軽快。(もちょっと長文のテストしてるが省略)
アレに使おう。