勉強日

今日の作業

Railsについての学習
ActiveScaffold
GetText

調べたことのまとめ

ジェネレータとプラグイン

ジェネレータは静的であり、1度だけ実行されコードを生成する。
プラグインは動的であり、アプリケーションランタイムの一部として実行される。
Railsのscaffoldジェネレータは1度だけ実行され、モデルの中の現在のフィールドに基づいて静的なHTMLテンプレートを作成する。
列を追加したいときにはビューを再生成するか、手動でビューにフィールドを追加する必要がある。
それに対しプラグインは、ビューを実行時に生成する為モデルの変更は苦労なく行える。

ActiveScaffold

http://blog.codezine.jp/editor/2007/09/ruby_on_railsactivescaffold_1.php

このサイトを参考にActiveScaffoldを使ってみた。

mysql> create database bookmark_development default character set utf8;

bookmarkというRailsアプリを作り
environment.rbファイルに文字コードを指定

$KCODE = 'u' 
require 'jcode'

を追加。次はdatabase.ymlの設定
次に

bookmark>ruby script/generate model bookmark

でmodelファイルbookmarkの作成
migrationファイルを

class CreateBookmarks < ActiveRecord::Migration
  def self.up
    create_table :bookmarks do |t|
      t.column :title, :string
      t.column :url, :string
      t.column :created_at, :datetime
      t.column :updated_at, :datetime
    end
  end
  def self.down
    drop_table :bookmarks
  end  
end

こんな感じに記述し実行
次に

bookmark>ruby script/generate controller user

でuserコントローラ作成
次にActiveScaffoldをインストール

bookmark>ruby script/plugin install  http://activescaffold.googlecode.com/svn/tags/active_scaffold

インストール後app/views/layoutsにactivescaffold.rhtmlを作り

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>ブックマーク管理</title>
    <%= javascript_include_tag :defaults %>
    <%= active_scaffold_includes %>
  </head>
  <body>
  <%= yield %>
  </body>
</html>

こんな感じに記述。
次にscaffoldを実行するControllerであるUserControllerに

class UserController < ApplicationController
  active_scaffold :bookmark 
  layout "activescaffold"
end

を記述し完了。
サーバを起動しhttp://localhost:3000/user
英語でわかりづらいからUserControllerを

class UserController < ApplicationController
  layout "activescaffold"
  active_scaffold :bookmark do |config|
    config.label = "ブックマークテーブル"
    config.columns = [:title, :url, :created_at, :updated_at]
    list.columns.exclude :created_at
    list.sorting = {:title => 'DESC'}
    columns[:title].label = "タイトル"
    columns[:created_at].label = "作成日"
    columns[:updated_at].label = "更新日"
  end 
end

と記述。内容は
・config.label…テーブル名の表記を設定
・config.columns…表示するカラムを設定。また、この順番で表に表示されます。
・list.columns.exclude…表には表示しないカラム。created_atカラムを非表示にしてみました。
・list.sorting…デフォルトソート。複数指定できるようです。
・columns.[].label…カラムの表記を設定。
次に
/vendor/plugins/active_scaffold/lib/configのファイルの
「:label => 'Edit'」を「:label => '編集'」などに書き換えリンク名を日本語に。

Gettext

次にGettextを使ってみる。
http://rubist.blog77.fc2.com/blog-entry-74.html
を参考に。

$>gem install gettext 

次に参考サイトのようにbookmarkモデルにバリデーションを追加

class Bookmark < ActiveRecord::Base
  #必須チェック
  validates_presence_of :title
  validates_presence_of :url
  #長さチェック
  validates_length_of :title, :maximum => 15
  #形式チェック
  validates_format_of :url, :with => /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$/ix
end

時間がなくなったため続きは明日。
今日の作業でScaffoldとActiveScaffoldの違いがわかった。

明日の作業

未定