肌寒い一日

わからなかったこと

今日のうちに解決できた。

明日やること

カートの作成

今日の作業でわかったこと

カタログ表示をするときの考え方を知れ、
またfind()メソッドの引数にparams[:id]
以外のものを取る使いかたも知ることができました。

調べたことのまとめ

>scaffoldで吐いたcontrollerでcreate,update,destroyがうまくいったときにredirect_toを使ってる理由

リダイレクトした場合、クライアントのブラウザ上には最終的に、リクエストしたURLではなく、リダイレクト先
のURLが表示されるので、Webブラウザでのリロード時にリダイレクト先のページのみリロードされるので、
二重処理を防げるため。

verify :method => :post, :only => [ :destroy, :create, :update ],
       :redirect_to => { :action => :list }

Postで送られてきたとき:onlyを実行する。
それ以外は:redirect_toを実行

プレースホルダ

後で正式なものに置き換えるまでの間、とりあえず使用するダミー。


sprintf()メソッドとは

フォーマット化された文字列を返す

sprintf("%0.2f", 1000)

は『1000.00』という文字列を返す。
詳しくは
http://search.net-newbie.com/php/function.sprintf.html

カタログ表示

DBにある販売可能な全ての商品をリストとして取り出しテーブルを表示する
ビュー内のコードに渡す。
まず販売可能な商品リストをモデルに要求できるものとしてコントローラーに

def index
  @products = Product.salable_items
end

次にsalable_items()メソッドをモデルに定義する。

def self.salable_items
  find(:all,
       :conditions => "date_available <= now()",
       :order => "date_available desc")
end
このfind()メソッドで販売可能か判断
:all → 条件に一致する全ての行を取得
:conditions → 検索条件
条件では販売日付が未来じゃないことをチェックするため、
現在の日時を調べるMySQLのnow()関数を使う
:order → ソート

詳しくはRuby on Rails 入門 P60
http://www.amazon.co.jp/Ruby-Rails%E5%85%A5%E9%96%80%E2%80%95%E5%84%AA%E3%81%97%E3%81%84Rails%E3%81%AE%E8%82%B2%E3%81%A6%E6%96%B9-%E8%A5%BF-%E5%92%8C%E5%89%87/dp/4798013951

このfind()メソッドはDBから返された各行に対応するProductオブジェクトが収められた配列を返すので
ビューでその配列から情報を取り出して表示する