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 がレイアウトテンプレート。