Ruby on Rails/Rails3を試してみる http://www.ark-web.jp/sandbox/wiki/5736.html
necoったーがAPIの変更についていけなくてサービスが停止してすでに数年たってしまったので、Rails3で作り直したい、と思い立って、やってみた。rails3の勉強がてらで。
以下、その備忘録
Rails3環境を新規に作る †
- 参考: http://edgeguides.rubyonrails.org/getting_started.html
- 参考: http://weblog.rubyonrails.org/2010/2/5/rails-3-0-beta-release/
- gemのバージョンをあげる(元は1.3.5でした)
sudo gem update --system
- 入れてみる
gem install tzinfo builder memcache-client rack rack-test rack-mount erubis mail text-format thor bundler i18n gem install rails --pre
- railsプロジェクトを作る
rails necotter
Gemfileでgemを入れる †
- Gemfileを編集する。以下を追加。
gem "haml" group :test do gem 'rspec-rails', ">= 2.0.0.beta.7" gem "factory_girl" end gem 'mysql'
- gemをインストールする(参考: http://d.hatena.ne.jp/willnet/20100324/1269407621)
bundle install vendor
DBの設定 †
- config/database.yml を編集 これまでどおり)
- DBを作る
rake db:create
- これでdevelopmentとtestの両方のDBができる
generatorを入れる †
- http://edgeguides.rubyonrails.org/generators.html
- rails3-generatorを入れる
git clone git://github.com/pjb3/rails3-generators.git lib/generators lib/generators/haml
- rspecのgeneratorは、rspecのgemの方を使わないとエラーになるっぽいので、消す
rm -r lib/generators/rspec*
- hamlは、haml_scaffold_generatorの方が充実しているっぽいので消して、そっちをいれる
rm -r lib/generators/haml* git clone git://github.com/psynix/rails3_haml_scaffold_generator.git lib/generators/haml
- generatorが増えてることを確認
rails generate ... いろいろ ... haml:controller haml:mailer haml:scaffold
トップページなどを作ってみる †
- 参考: http://edgeguides.rubyonrails.org/getting_started.html, http://edgeguides.rubyonrails.org/generators.html
- config/application.rbに追記。これで、テンプレートエンジンはhaml、テストフレームワークはrspec、fixtureは、factory_girlになるらしい。
config.generators do |g| g.template_engine :haml g.test_framework :rspec, :fixture => true, :views => false g.fixture_replacement :factory_girl, :dir => "spec/factories" end - generator で、トップページを作ってみる
rails generate controller necos index
- 生成されるビューのファイルや、テストケースファイルがhamlや、rspecになってた!
create app/views/necos/index.html.haml create spec/controllers/necos_controller_spec.rb
- 生成されるビューのファイルや、テストケースファイルがhamlや、rspecになってた!
- モデルも作ってみる
rails generate model neco
- factory girlのファイルも作られた
create spec/factories/necos.rb
- factory girlのファイルも作られた
- routesにも追記されてた
get "necos/index"
- 既存のページをhamlにして、トップページのビューと置き換えてみる
mkdir public/stylesheets/sass/ chmod ugo+w public/stylesheets/ public/stylesheets/sass bundle exec vendor/bin/html2haml top.html app/views/necos/index.haml bundle exec vendor/bin/css2sass scaffold.css public/sytlesheets/sass/scaffold.sass
- うーん、html2hamlとかcss2sassはうまく変換できなかった。。。ここは部分的にerbにする
- デフォルトのindex.htmlは削除
rm public/index.html
- 「/」のページとしてNecosController#indexを出してみる。config/routes.rbを編集
root :to => "necos#index"
mod_passengerで見てみる †
- passengerでは、RailsEnvではなく、RackEnvになるらしい
RackEnv development
トップページ以外も作ってみる †
- 参考: http://edgeguides.rubyonrails.org/routing.html
- やはり、基本RESTfulURLの形式に沿って作りたい
- routesに次のように記述
resources :necos do # CRUD系のURLが作成 collection do # それ以外のURL /necos/xxx のタイプ get :choice get :ranking get :help end member do # それ以外のURL /necos/xxx/#id のタイプ get :image end end - 後は従来どおり、コントローラーに記述追加してビューファイルを用意すれば見られる
ActiveRecordでデータを取ってくる †
- 参考: http://edgeguides.rubyonrails.org/active_record_querying.html#retrieving-objects-from-the-database
- 従来の書き方
@necos = Neco.find(:all, :limit => 5, :order => 'friendship DESC', :conditions => 'user_id > 0') - Rails 3流に書き直す
@necos = Neco.limit(5). order('friendship DESC'). where('user_id > 0')
named_scopeで書き換え †
- 参考: http://m.onkey.org/2010/1/22/active-record-query-interface
- rails3では「scope」に
- ハッシュではなく、メソッドチェーンで
- app/model/neco.rb
scope :ranking, lambda { |per_page, page| per_page = 50 unless per_page.present? && per_page > 0 page = 1 unless page.present? && page > 0 limit = per_page offset = (page - 1) * per_page where('user_id > ?', 0). order('friendship DESC'). limit(limit). offset(offset) } - app/controllers/necos_controller.rb
def index @necos = Neco.ranking(5, 1) end
tags: Ruby on Rails
![[PukiWiki] [PukiWiki]](image/sandbox.gif)



