LoginEngine + UserStamp 成功その2?
User expected, got Stringというメッセージの原因は、scaffoldで生成したビューのリクエストにcreated_byとupdated_byがヌル文字列で含まれていたからでした。他にないんだからログ見てすぐ気付くべきだよね・・・。
で、いちいちモデルの方に
def updated_by=(value) value = nil if value.nil? || (value.respond_to?(:empty?) && value.empty?) self[:updated_by] = value end
みたいなことを書きたくなかったので、無理やりやることにした。
module ActiveRecord class Base @@method_updating = false def self.method_added( method_name ) if [:created_by=, :updated_by=].include?(method_name) return if @@method_updating @@method_updating = true begin original_method_name = "original_" + method_name.to_s filtered_method_name = "filtered_" + method_name.to_s alias_method(original_method_name, method_name); define_method(filtered_method_name){ |value| value = nil if value.nil? || (value.respond_to?(:empty?) && value.empty?) self.send(original_method_name, value) } alias_method(method_name, filtered_method_name); ensure @@method_updating = false end end end end end
無理があるにも程があるだろ、と突っ込みたいけど、どうしたらいいのかわかんないっすー。どうやったらきれいに解決できるのー?