「we love heroku」とは、Herokuで開発されたサービスをギャラリーとして紹介するサービス。せっかくだからぼくが作ったサービスも登録しといた。ジェニュインブルーさんが作ってるぽい。
http://welove.herokuapp.com/
Railsプロジェクトのリファクタリングをしたり、よりよい書き方を探したりしようとすると、WEB上の情報だけでは収集することが難しいので、Railsのオープンソースプロジェクトのソースを読むと色々参考になったりします。
とはいえソースコードを読むだけでは細かい挙動が理解出来なかったりするところもあるので、やっぱり実際に動かしたくなったりします。なので動かしながらコードをちょっと読んでみることに。
we_love_heroku
Github
https://github.com/ppworks/we_love_heroku
TOPからの検索処理をちょっと追ってみる。
検索処理の定番gemのransack使ってるみたい。
1 |
gem 'ransack' |
1 2 3 4 5 6 |
def index @search = Site.search(params[:q]) @sites = @search.result.active.page(params[:page]).per(params[:per]) @sites = @sites.order('id DESC') if @search.sorts.empty? respond_with @sites end |
respond_withというメソッドを使ってる。説明はこちらのエントリが参考になる。
http://blog.livedoor.jp/sasata299/archives/51804693.html
indexの場合は置いといて、updateをみる。
1 2 3 4 5 |
def update @site = current_user.sites.find(params[:id]) flash[:notice] = t('sites.update.updated') if @site.update(site_params) respond_with @site, location: sites_url end |
この場合、@siteの値にバリデーションエラーがなければ、locationで指定したパスにリダイレクトしてくれる。逆にエラーがある場合は、自動的にeditをrenderするっぽい。挙動は未確認だけどそういう理解。
Scaffoldで生成されるような標準的なCRUDで実装されている部分をスッキリかけそうな気がする。使ってみよう。
こんな感じでアクションに.jsonつければjson形式で返ってくる。urlがアレなのはransackのせいかな?
http://welove.herokuapp.com/sites.json?utf8=%E2%9C%93&q%5Bname_or_url_or_description_or_creator_or_hash_tag_or_repository_url_cont%5D=kpt
we love herokuはmodelがuserとsiteしかないコンパクトなコードでした。コンパクトなだけに全体を見通しやすいのと洗練されてる感じがするのでコードリーディングにおすすめかも。
原田 敦
最新記事 by 原田 敦 (全て見る)
- 「we love heroku」をローカルで動かしてみるついでにちょっとだけコードを読んでみる - 2014年9月13日
- binding.pryでループ内にブレイクポイント仕掛けるとだるいことになる - 2014年8月31日
- Rails + Capybara + Rspecをセットアップして簡単なテストが通るまで - 2014年8月30日