続いてロジックのカスマイズについて。残念な英語力ではぴんとこない箇所は英語のままpending。実践もしくは英語力の向上を伴って正しく理解することがあれば、加筆・修正する予定です。この記事は2013/07/15現在のものです。自分の要件に合わせてオーバーライド、拡張することができます。自分のアプリケーション/エクステンションへ変更するような場合は、変更の対象となる元のクラス名に’_decorator'を付け足してapp/modelsやapp/controllersにファイルを作成するのが標準的な方法です。endend※これらと同じフォーマットで既存のメソッドを再定義することができます。ProductデータへのアクセスProductコントローラーへ新しいメソッドを追加する場合、Productデータへ頻繁にアクセスすることになるでしょう。:load_data'を使うことで実現できます。endend※:load_dataはそのパーマリンクによってProductを見つけるのにparams[:id]を使います。メソッドを完全にオーバーライドする必要なく、既存のコントローラーの出力をオーバーライドしたり変更する方法をサポートしています。respond_overrideメソッドrespond_overrideメソッドはRails3のrespond_withメソッド(現在全てのSpreeコントローラーで使われている)でアクションからのレスポンスをカスタマイズします。以下のようなシンタックスでオプションをハッシュにしてわたすことができます。Spreeのコントローラー全てが持っているrespond_toメソッドを呼び出す際にどのフォーマットでレスポンスを返すか定義します。:successか:failureが当てはまります。:successはほとんどのアクションでデフォルトになっています。モデルのアップデート時にバリデーションに失敗する場合はモデルを作成したり変更したりするアクションは:failureになるでしょう。カスタムレスポンス(renderやredirect_to)を返すことが期待される実体コードが含まれるような無名関数を指定。匿名関数は正しいタイミングで確実に評価されなければなりません。使い方ProductsController#indexで独自の部分テンプレートを表示させたい時はapp/controllers/products_controller_decorator.rbに以下のように書きます。}endAdmin::ProductsControllerでエラー時にリダイレクトさせたい場合などはこのように書きます。}end注意アクションがレスポンスを定義する為にrespond_withを使用していなければ、respond_overrideは動作しません。override.Productの画像Spreeは画像を管理する為にThoughtbotのgem、paperclipを使用しています。paperclipの全てのオプションはSpree::Imageクラスにあります。Productとサムネイルのデフォルトのサイズを修正したければ、アプリケーションのモデルのディレクトリにimage_decorator.rbを作成して以下のように書くだけで変更できます。}endテンプレートで使用するサイズを任意で追加することもできます。あれば、240x200になるでしょう)。すると、画像は指定したサイズで中心から切り取られます。している場合は画像は変更されません)。ロジックのカスタマイズTweet関連記事2013-10-14Spreeにカード決済を導入する方法Spreeざんまいの毎日です。seeds.rbをつくってみたgistに上げました。