またも謎のcountメソッド。
発注済の物品情報をカウントしましょう、というメソッド。
def self.count_pending count("checked_at is null") end
これがサイトに載っていたんですが、このまま書くとログイン時に(このメソッドを実行する時に)エラーが出ます。
ActiveRecord::ActiveRecordError: ?????: Encountered "is" at line 1, column 25?: SELECT count(checked_at is null) AS count_checked_at_is_null FROM orders
countメソッドの引数に関して文句を言われているようです。
このメソッドはSQLの件数を数えるっていうことですから、多分文字列を唐突に与えられてもどーしろと、という話なんではなかろーか、ということで。
取り敢えず問題の部分をコメントアウトで消してみる。つまり、count_pendingメソッドは空ということです。
ログイン時のエラーは出なくなりましたが、表示に不十分な点が。
…作業BGMのところは、まあ、スルースルー(因みに懐かしのヴィジュアル系的なものを聴いてました。ときめく)。
発注の件数というところは正しい数値が入っているんですが、確認待ちの件数というところが空欄になっています。
ここに当てはめていた変数は、app/controller/login_controller.rbで書いてます。
class LoginController < ApplicationController layout "articles" def index @total_orders = Order.count @pending_orders = Order.count_pending end …
前述のcount_pendingメソッドの中身が空欄なので、ここに入るべき数値もないってことですな。
という訳で、やっぱりcount_pendingメソッド内のcountに何かよさげなもんを与えてやらなきゃ。
さて、何がいいかなと。直前に同じ文字列をcondotionsオプションで与えてるfindメソッドがあったので、それを真似してみました。
def self.count_pending count(:all, :conditions => "checked_at is null") end
:all…全部カウントするってことでしょうが…
駄目なら別のものを入れてみよう、取り敢えず実行だ。
ログインします。
あ、出た。
因みに数字的にも合ってます。
取り敢えずはこれで良さそうです。
でも仕組みがいまいちわかってません…allでいいのか…
後々不具合が出るかもですが、取り敢えず、先に進みます。
Ruby on Rails2.0 チュートリアル 「Webアプリケーション開発方法」
〜物品管理フォームでのユーザ管理〜