私のモデルには次のものがあります。
class Log < ActiveRecord::Base
serialize :data
...
def self.recover(table_name, row_id)
d = Log.where(table_name: table_name, row_id: row_id).where("log_type != #{symbol_to_constant(:delete)}").last
row = d.data
raise "Nothing to recover" if d.nil?
raise "No data to recover" if d.data.nil?
c = const_get(table_name)
ret = c.create(row.attributes)
end
そして、私のコントローラーでは、次のように呼び出します。
def index
Log.recover params[:t], params[:r]
redirect_to request.referer
end
問題は、このページに初めてアクセスすると、以下に示すエラーが表示されることですが、更新後はすべて問題ありません。どこに問題がありますか?
undefined method `attributes' for #<String:0x00000004326fc8>
データ列には、モデルのインスタンスが保存されています。初めて列が適切にシリアル化されていません。それは単なる yaml テキストです。しかし、リフレッシュ後はすべて問題ありません。それは紛らわしいです、何が問題なのですか?レールのバグ?
毎回ではありませんが、最初のアクセスですべてが問題ない場合があります。