ひさびさにRailsをやる
ちょっと卒論で作ろうと思ってるシステムをRailsで作りたいなぁと思ってひさびさにRailsをやる。
題材は[Ruby][Rails] Ruby on RailsでWiki
http://d.hatena.ne.jp/muscovyduck/20060511#1147307789
以下少し違ったところと要点をまとめる。
開発&実行環境
walf443@ruribita:railswiki% script/about
About your application's environment
Ruby version 1.8.2 (i386-linux)
RubyGems version 0.8.11
Rails version 1.1.2
Active Record version 1.14.2
Action Pack version 1.12.1
Action Web Service version 1.1.2
Action Mailer version 1.2.1
Active Support version 1.3.1
Application root /home/walf443/railswiki
Environment development
Database adapter mysql
Database schema version 2
データベース周り
自分はMySQL4.0を使った。
後々FrontPageがないとハマることになるので、自分はマイグレーションのスキーマを更に次のように変更した。
# db/migrate/002_initial_schema.rb class Contents < ActiveRecord::Base end class InitialSchema < ActiveRecord::Migration def self.up Contents.create :title => 'FrontPage', :body => 'This is FrontPage.' end def self.down frontpage = Contents.find_by_title 'FrontPage' frontpage.destroy end end
Contentsのアイテムを作成するので事前にクラスだけ定義しておくのがポイント。
$rake migrate
でスキーマを上げたり戻したり出来るのでファイルは分けておいた方が良いと思われる。
self.upメソッドには今回追加する処理を記述。self.downメソッドには前回のスキーマに戻すためのメソッドを記述する。
Helper
Helperにはscript/generate helperとかないのかな。うまく動作しなかった。
題材のページでは一つのファイルにHelperを記述しているけど、こちらでは動かず。ということで以下のようにした。
walf443@ruribita:railswiki% cat app/helpers/railswiki_helper.rb module RailswikiHelper end walf443@ruribita:railswiki% cat app/helpers/railswiki_helper/to_html_with_links.rb require 'rdoc/markup/simple_markup' require 'rdoc/markup/simple_markup/to_html' module RailswikiHelper class ToHtmlWithLinks < SM::ToHtml def handle_special_WIKIWORD(special) %Q|<a href="/railswiki/show/#{special.text}">#{special.text}</a>| end def handle_special_HTTP(special) %Q|<a href="#{special.text}">#{special.text}</a>| end def handle_special_BRACKET(special) %Q|<a href="/railswiki/show/#{special.text[2..-3]}">#{special.text[2..3]}</a>| end end end walf443@ruribita:railswiki% cat app/helpers/railswiki_helper/railswiki_template.rb require 'rdoc/markup/simple_markup' require 'rdoc/markup/simple_markup/to_html' module RailswikiHelper class RailswikiTemplate def initialize(view=nil) @view = view end def render(template, assigns) markup = SM::SimpleMarkup.new markup.add_special /\b([A-Z][a-z]+[A-Z]\w+)/, :WIKIWORD markup.add_special %r|(https?://\s+)|, :HTTP markup.add_special /(\[\[.+?\]\])/, :BRACKET markup.convert template, ToHtmlWithLinks.new end end end
SM::Simpleがなかなか認識されない(Const missing)ので仕方なく両方のファイルにrequireした。こういうときはどこにrequireするものなのだろうか。
Controller・View
hoge :action => ... とかいう感じのメソッドってどちらかというとSymbolを渡したくなるのは自分だけだろうか。特に:actionはメソッド名を指しているのでSymbolの方がそれっぽい気がする。エディタ的には色がつかないので文字列の方が見やすいのだけど。
その他
WEBrickでサーバを起動したとき、.irbrcでプロンプトの設定をしているとActiveSupportの拡張によりエラーが発生するようです。具体的には以下のような記述。
IRB.conf[:PROMPT][:SIMPLEST] = { :PROMPT_I => "", :PROMPT_S => "", :PROMPT_C => "", :RETURN => " #=> %s\n\n" }
エラーメッセージを頼りにunless IRB.conf[:PROMPT].nil? .. end で囲むと大丈夫になった。
まとめ
簡単にできると思っていたが割といろんな場面でハマった。というわけで色々作りながら覚えていこうかと思う。