Railsでネストしたリソースのscaffoldを生成する
これは結構便利!blogにひもづくentriesのようなネストしたリソースを管理するアプリを作りたいときに、今まで手動でmodelの関係・routes・controllerのfilter・viewのurlヘルパーをを編集していたが、そこらへんを解決済みのscaffoldを生成してくれるプラグインがあった。
http://deaddeadgood.com/2008/10/8/scaffolding-nested-resources-in-rails
これを使えば、この間作ったRailsで作るログイン可能なブログシステムもたったのこれだけ!
rails blog cd blog script/plugin install git://github.com/technoweenie/restful-authentication.git script/plugin install git://github.com/phorsfall/rspec_on_rails_nested_scaffold.git script/generate authenticated user script/generate rspec_nested_scaffold blog title:string user:belongs_to --owner user script/generate rspec_nested_scaffold entry title:string body:text blog:belongs_to --owner blog rake db:migrate
で出来ると思ったんだけど、routesとmodelは自分で変更する必要あり。
# config/routes.rb ... map.resources :users, :shallow => true do |user| user.resources :blogs do |blog| blog.resources :entries end end ... # app/models/user.rb class User < ActiveRecord::Base ... has_many :blogs ... end # app/models/blog.rb class Blog < ActiveRecord::Base belongs_to :user has_many :entries end
あとviewからuser:belongs_toとblog:belongs_toの部分を抜いて、ブログとエントリーへのアクセスにログイン必須のフィルターをかけてあげる必要があるけど、こりゃ大分楽になるわ。
追記
routesに:shallow => trueオプションを付けてしまうと、show, editのアクションへのurlを解決できなかった。:shallowオプションなしの一段のネストなら大丈夫。