Padrino 覚書き

前準備

インストール

ふつーに % sudo gem install padrino で。

プロジェクト作成

padrino のgenerate project コマンドで。-d で ORM、-e でレンダリングエンジンを指定。-b をつけると bundle までやってくれる。

% padrino g project sample -d activerecord -e erb
...

作った後に設定変えたい場合は .components をいじる。

ファイル構成

こんなかんじ。rails よりだいぶシンプル。

+ app/
| + controllers/
| + helpers/
| + views/
| | + layouts/
| + app.rb
+ config/
| + apps.rb
| + boot.rb
| + database.rb
+ public/
| + (snip)
+ config.ru
+ Gemfile
+ Rakefile

Hello world

まずはapp/app.rb に sinara と同じような感じで。

module SampleBlog
  class App < Padrino::Application
    ...
    get '/' do
        erb "hello world"
    end

これで rackup すれば hello world できるはず。ちなみにセッションは使わなくても必須なので enable :sessions は消しちゃダメ。

admin

先に admin を作っておくと db の CRUD ができるとかいろいろいいらしいので入れる。 % padrino g admin で、後はメッセージにあるよう、rake db:migrate, db:seed する。db:create は省略しても db:migrate で db を作ってくれる。 rackup して localhost:9292/admin にアクセスし db:seed で入力したメール、パスワードを入れると管理画面に入れる。 この時点では特にあまりうれしいことはなさそうだが、後で使う。

コントローラー

sinatra ではルーティングが増えるとワケワカになりがちだが、 padrino だと namespace で分けたりまとめたり出来る。 また、実urlとは別に概念としてのアクションが実装できる。 例えば sinatra だと get '/show' で /show のアクセスで show のアクションを記述するが、 padrino だと get :show としてアクションを記述した上、:map => "/showvalue" などと実際のルーティングと別にできる。

def :show, :map => "/showvalue", :with => :id
  params[:id]
end

実際のルーティングは、% rake routes で表示できる。

helper

link_to, url_for とか。他にもあるけど。

  link_to("show value", url_for(:show, :id => 5))

グルーピング

Padrina::Application のクラスメソッド controllers を呼び出して作る。

  class App < Padrina::Application
    self.controllers :admin to
      get :index do
      end
      get :create do
      end
    end
  end

コントローラーの作成

g controller で。引数を渡すとメソッドを作ってくれる。

% padrino g controller posts get:index get:show

で app/controllers/app/controllers/posts.rb にテンプレートを作ってくれる。 単に Sample::App.controllers do; end と引数で指定した def get :index; end の枠組みを作ってくれるだけ。

モデル

g project -d activerecord としていれば、% padrino g create model post で models/post.rb(中身は class Post < ActiveRecord::Base; end だけ。)と db/migrate/001_create_posts.rb(いわゆるマイグレーションファイル)を作成。 必要に応じて migration ファイルにcreate_table したり model ファイルにhas_many したりして、 db:migrate でおk。

データベースファイルは特に指定しないと db/sample_development.db に。establish_connection() する必要がないので楽。

コンソール

% padrino c でコンソールに入れるので、> post Post.new(title: "foo", text: "asdf") とかして model をいじくることができる。

ビュー

app/views/layouts/application.erb がレイアウトテンプレート。