necoったーがAPIの変更についていけなくてサービスが停止してすでに数年たってしまったので、Rails3で作り直したい、と思い立って、やってみた。rails3の勉強がてらで。
以下、その備忘録
** Rails3環境を新規に作る [#i8dc559b]
- 参考: 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を入れる [#k6021fe6]
- 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の設定 [#n7875ffa]
- config/database.yml を編集 これまでどおり)
- DBを作る
rake db:create
- これでdevelopmentとtestの両方のDBができる
** generatorを入れる [#u9071dee]
- 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
** トップページなどを作ってみる [#lc6e30f2]
- 参考: 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
- モデルも作ってみる
rails generate model neco
-- factory girlのファイルも作られた
create spec/factories/necos.rb
- 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で見てみる [#ec2ae35d]
- passengerでは、RailsEnvではなく、RackEnvになるらしい
RackEnv development
** トップページ以外も作ってみる [#t5b28768]
- 参考: 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でデータを取ってくる [#d225596f]
- 参考: 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で書き換え [#q51440a0]
- 参考: http://m.onkey.org/2010/1/22/active-record-query-interface
- rails3では「scope」に
- ハッシュではなく、メソッドチェーンで
- app/model/neco.rb
scope :ranking, lambda { |per_page, page|
page = 1 unless page > 0
per_page = 20 unless per_page > 0
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
#blikifooter(志田)
tags: [[Ruby on Rails>tag/Ruby on Rails]]