Home > Programming > 泥棒を捕まえようと思い立ったので、縄を編んでみた。

泥棒を捕まえようと思い立ったので、縄を編んでみた。

sshot-434

わーい♪ Rails で Wiki もどきができたよ!

そろそろ本で読んだ感想なんかをまとめる Wiki がほしくなったのだけど、そのためには Wiki を作る必要があるんじゃねーか? と思い立ったので。確か昔も一度挑戦したのだけど、そのころのコードを見てもちんぷんかんぷんだったのでもう一回作り直した。ここまでで、所要時間3時間…

とりあえず、拡張型Markdownと[[]]ブラケットでWikiネームを使えるようにしました[1] 。普通のWikiと違うところは作成編集削除にログインが必要で代わりに凍結機能がないこと、Sqlite 3データベースに保存されること。ファイルがわらわらできると、いろいろめんどくさくね?

まだバージョン管理とタグ機能、ファイル添付機能を入れていないのでまだまだだけど。コメントとトラックバックはDisqusを使う予定なので、ファイル添付機能もあえてつけずに外部サーバーと連携するようにするかなぁ…とか考え中。編集画面のサイドバーで添付ファイルを選択すれば、編集画面へタグが挿入されるとか、そういうのを画策。


今日の忘れていたことメモ—マイグレーションファイルの書き方。

1. Scaffold でいろいろいっぺんに作る

> ruby script\generate scaffold Page title:string content:text

※20100122151948_create_pages.rb

class CreatePages < ActiveRecord::Migration
  def self.up
    create_table :pages do |t|
      t.string :title
      t.text :content

      t.timestamps
    end
  end

  def self.down
    drop_table :pages
  end
end

2. Scaffold で作ったテーブルに初期値を与えたい

class CreateSettings < ActiveRecord::Migration
  def self.up
    create_table :settings do |t|
      t.string :site_name
      t.string :theme

      t.timestamps
    end

    Setting.create(:site_name => 'a tiny wiki', :theme => 'default')
  end

  def self.down
    drop_table :settings
  end
end

3. んあ、カラムひとつ追加するの忘れてた!

> ruby script\generate Magration AddSiteDescriptionToSetting

※20100122164628_add_site_description_to_setting.rb

class AddSiteDescriptionToSetting < ActiveRecord::Migration
  def self.up
    add_column :settings, :site_description, :string

    Setting.update(1, :site_description => 'this is a very tiny wiki.')
  end

  def self.down
    remove_column :settings, :site_description
  end
end

update(1, …) でええんかなぁー。こういうの、ほんとは決め打ちよくないけどね。

4. 最後に

> rake db:migrate

せっかくサイト名とかを設定できる設定画面を作ったのだけど、特殊な名前のWikiページに書いて設定するようにしたので、最後には結局不要になってしまった…。えへへw

  1. Bluefeather: http://ruby.morphball.net/bluefeather/ (*)

Home > Programming > 泥棒を捕まえようと思い立ったので、縄を編んでみた。

My Friend Feed

http://friendfeed.com/daruyanagi

Google Analyticator

608
 Unique Visitors 
 (1 day) 
Powered By Google Analytics

Return to page top