トップ «前の日記(2005-07-11) 最新 次の日記(2005-07-13)» 編集

3 日坊主日記


2005-07-12 [長年日記]

_ [Rails] Rails 0.12.1 -> 0.13.0

# Require Rails gems.
require 'rubygems'
require_gem 'activesupport', '= 1.0.4'
require_gem 'activerecord', '= 1.10.1'
require_gem 'actionpack', '= 1.8.1'
require_gem 'actionmailer', '= 0.9.1'
require_gem 'actionwebservice', '= 0.7.1'
require_gem 'rails', '= 0.12.1'

だと動くけど、rails 0.13.0 で動かなくなった事例をば。

-    <td><%= text_field "customer", "birth(2i)", "size" => 8 %></td>
+    <td><%= text_field_tag "customer[birth(2i)]", "", "size" => 8 %></td>

検索フォームに誕生月の項目を用意したんだけど、 customer の birth(2i) というメソッドがないよ、になる。 とりあえず value="" でいいので、しのぐ。

+    add_limit!(sql, :limit => limit)

-    limit = sanitize_sql(limit) if limit.is_a? Array and limit.first.is_a? String
-    connection.add_limit!(sql, limit) if limit

昔の find_all の実装を元に作ったメソッドで limit が常に 0 になってうまく動かなくなっていた。 MySQL だと SQL_CALC_FOUND_ROWS とか INTO OUTFILE とか、select 文を少し変形して使いたくなることあるよね?

  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)

    find_by_sql(sql)
  end

  def self.found_rows
    self.connection.select_one("SELECT FOUND_ROWS()")["FOUND_ROWS()"].to_i
  end

こんなふうに。

上に挙げたようなヘンなことをしている箇所を除けば、互換性は保たれているようだ。

_ [Rails] ActionMailer 1.0.0

わからなくなってきた。

  private_class_method :new #:nodoc:

…嫌がらせか? :(

あと

class Mailer < ActionMailer::Base
  def mail(...)
  end
end

だと create_mail を呼んでしまうなあ。これは mail という名前が悪いな。

もう一度使い方を見直す必要があるけど、気が向かない。

[]