2008年4月30日水曜日

現在公開中のサービス

以下のWEBサービスを公開しています。

>> mizoto

redditにインスパイアされて作ったソーシャルニュースサイト。

>> Mille Records

amazonのコピーサイト。無駄にインターナショナル。Recordsって名前だけどレコード屋さんじゃないよ。

>> 店map

ぐるなびとホットペッパーの同時検索サービス。
ぐるなび、ホットペッパー、Google MapsのAPIを使用。

>> YouCar

全国の中古車検索サービス。
リクルートWEBサービスのカーセンサー.net API と 楽天API を使用。

>> Google Gadget

いろいろ作ってます

2008年4月28日月曜日

[Ruby on Rails] よく使いそうなプラグインまとめ

随時追加予定

[認証]

restful_authentication


[ページング]

paginating_find


will_paginate


[タグ]

acts_as_taggable_on_steroids

[Ruby on Rails] Railsのキャッシュ(フラグメント)

Railsのキャッシュは3種類(ページ、アクション、フラグメント)あって、認証ありのサイトなどで同一ページでもアクセスする条件によって画面が変わる場合はフラグメントを使うのが無難。

以下Rails2.0系でフラグメント・キャッシュを使うためのメモ

まずはキャッシュを使えるようにする

productionモードだとあらかじめキャッシュが使えるようになっているが、developementモードとtestモードの場合は使えないようになっている。
developementモードでキャッシュを使う場合は

config/environments/developement.rb
config.action_controller.perform_caching = false

これを書き換える。

config.action_controller.perform_caching = true


実際にキャッシュする

実際にフラグメント・キャッシュを行うには controller と view をいじる必要がある。

[view]
まずはviewのどの部分をキャッシュしたいのか決める。

Hello <%= @name %>
<% cache do %>
All the topics in the system:
<%= render_collection_of_partials "topic", Topic.find_all %>
<% end %>

<% cache do %> ~ <% end %> の間がキャッシュされる。
<% cache(:controller => "topics", :action => "list", :action_suffix => "all_topics") do %>
のように引数を渡すことで一意のキーを生成できる。
同じコントローラー、アクションでも id 別にキャッシュしたい場合は :aciton_suffix => @id などど指定することで id別のキャッシュファイルを作成することが可能。

[controller]
hoge_controller.rb
unless read_fragment :controller => "topics", :action => "list",  :action_suffix => "all_topics"
@topics = Topic.find(:all)
end

read_fragment というメソッドで、引数に渡されたキーを持つキャッシュがあるかどうか判断。
キャッシュされていない場合にのみデータベースにアクセス。

キャッシュの失効

プラグイン等を使わない限り、キャッシュが自動的に失効することはないので、モデル(テーブル)が更新された場合にキャッシュを失効する処理を書く必要がある。

コントローラーの create, update, destroy などのメソッド内で
expire_fragment :controller => "topics", :action => "list", :action_suffix => "all_topics"
場合によってはこの失効処理が複雑になることがある。
そういう場合、RailsにはSweeperという機能がある。

Railsでスイーパーを使ってみる

キャッシュファイルが生成される場所

キャッシュをファイルで保持する場合、www.example.com というドメインを持つサイト だったらtmp/cache/www.examle.com 以下に生成される。

参考:
Rails API ドキュメント Module ActionController::Caching::Fragments

2008年4月27日日曜日

Twitterでジャーナリズムw

下のふたつのページを見て感じたこと。

真の個人ニュースサイターが見ておくべきサイト

How We Use Twitter for Journalism


「ニュースサイター」というのがどういう人物を指すのがよく分からないけれど、そこで紹介されているサイトをみると、見出しを並べるだけならわざわざブログでやることはないような気がした。Twitterを使えばもっとシンプルになるのに。
もちろんアフィリエイトはできないけど。

2008年4月26日土曜日

[Ruby on Rails] render_to_string

AJAXでムニャムニャやる時にVIEWでレンダリングしたHTMLをコントローラーに返して欲しい場合、render_to_stringというメソッドが使える。

Rails API ドキュメント render_to_string(options = nil, &block)

Renders according to the same rules as render, but returns the result in a string instead of sending it as the response body to the browser.


render_to_string :action => 'someaction', :layout => false

見たいな感じ