3 日坊主日記
2009-03-11 [長年日記]
_ [Rails] will_paginate-2.2.2
will_paginateでGETパラメータが一部しか渡らないバグがあって調べてみると、 どうやらwill_paginate-2.2.2 (gem) がバグってる。
fixed nested hash
diff -r d65a9e0d35c7 -r 4a8b7f2c4754 lib/will_paginate/view_helpers.rb
--- a/lib/will_paginate/view_helpers.rb Wed Mar 11 04:51:19 2009 +0900
+++ b/lib/will_paginate/view_helpers.rb Wed Mar 11 04:52:32 2009 +0900
@@ -317,7 +317,7 @@
target[key] = existing = {} if existing.nil?
if existing.is_a?(Hash)
stringified_merge(existing, value)
- return
+ next
end
end
git では直ってるぽい。
本日のツッコミ(全2件) [ツッコミを入れる]
2009-02-20 [長年日記]
_ [Rails][MySQL] FOUND_ROWS
昔作ったRails appを2.1系まで上げていじっていたところ FOUND_ROWS() の値がおかしくなってることに気づいた 。
Customer Load (0.969000) SELECT SQL_CALC_FOUND_ROWS * FROM customers WHERE (point >= '100' and shop_id = '2') ORDER BY code LIMIT 50 Customer Columns (0.015000) SHOW FIELDS FROM `customers` # こいつめ SQL (0.000000) SELECT FOUND_ROWS()
testを書いてなかった……
Columns の取得は find_by_sql(sql) の中で instantiate(record) するときに行われる。 仕方ないので find_by_sql(sql) の実装を展開して対応してみた。
def self.find_all_with_calc_found_rows(conditions = nil, orderings = nil, limit = nil, joins = nil)
sql = "SELECT SQL_CALC_FOUND_ROWS * FROM #{table_name} "
sql << "#{joins} " if joins
add_conditions!(sql, conditions)
sql << "ORDER BY #{orderings} " unless orderings.nil?
add_limit!(sql, :limit => limit)
# ret = find_by_sql(sql)
row = connection.select_all(sanitize_sql(sql), "#{name} Load")
@found_rows = connection.select_one("SELECT FOUND_ROWS()")["FOUND_ROWS()"].to_i
row.collect! { |record| instantiate(record) }
end
def self.found_rows
@found_rows
end
[ツッコミを入れる]
# かげ [もしかして、もりきゅうさんですか? ]
# moriq [そうです。^^ お久しぶりです。]