子クラスが仮想フィールドを宣言できるようにする、かなりユニークなクラスがあります。子は、次のように親クラスのメソッドを呼び出すことにより、XMLとして格納された仮想フィールドを宣言できます。
class Child1 < Parent
create_xml_field ["readings", "usage"]
end
私は厄介な回避策を介してそれを機能させることができました。create_xml_fieldメソッドは、フィールド名をクラス変数に格納します(以下を参照)。init_xml_fieldsメソッドは、after_initializeメソッド内から呼び出されます。
class Parent < ActiveRecord::Base
def self.create_xml_field(fields)
@@xml_fields[self.name] = fields
end
def init_xml_fields(xml_fields)
xml_fields.each do |f|
f=f.to_sym
self.class_eval do
define_method(f) { ... } # define getter
define_method(f) { ... } # define setter
attr_accessible(f) # add to mass assign OK list, does not seem to work!
end
end
end
protected
def after_initialize
init_xml_fields
end
end
やっかいなえ?私は誇りに思っていませんが、それを機能させるのに苦労しています。また、回避策は、フォームパラメータの一括割り当てでは機能しません。
子クラスでの一括割り当てを許可するためにattr_acessibleを動的に呼び出した経験はありますか?前もって感謝します!
この投稿はわかりやすくするために編集されました。