会計/財務レール アプリのバックエンド作業 (xls スクレイピング) を行っています。テーブルが同じ列に対して複数の会計エンティティ タグを受け入れられるようにしたいと考えています。
だから私はalias_attribute
これを達成するために私のモデルでメソッドを使用しています
class DouglasAudit
#...
alias_attribute :new_alias_name, :actual_column_name
alias_attribute :net_rental_income, :net_rental_revenue
#...
end
このようなエイリアシングは、非常に多様なスプレッドシートをスキャンして、メタタグの一致を検索し、それぞれのモデルで呼び出されるシンボルに直接変換して、それぞれのデータを保存することができるため、非常に便利です (疑似コード、実際のコードははるかに密度が高い):
spreadsheet[0] = [Roo::Excel(filename), property_id]
rows_to_scrape.each do |rownum|
rowtag = spreadsheet[0][0].cell(rownum, "A")
if @tags_wanted.include?(rowtag)
d = DouglasAudit.find_by_ssid(spreadsheet[0][1])
tagvar = variableize(rowtag).to_sym # 'variableize' converts "Hello World" into "hello_world", etc
d[tagvar] = spreadsheet[0][0].cell(rownum, "E")
d.save
end
end
net_rental_revenue
上記のエイリアス(2 番目の名前付き変数) がある場合、:net_rental_income が DouglasAudit インスタンス ( d[:net_rental_income]
) に渡されても何も起こりません。ar_object[:col] メソッドの性質上、エラーはスローされませんが、データは保存されません。
動的プログラミングに ar_object[:col] メソッドを使用できることが本当に気に入っています。これをつまずかせるためにここで何が起こっているのか、そしてそれを回避するいくつかの良い方法は何ですか?
-- eval() の使用を避けようとしていますが、eval を使用した回答は、安全性は低くなりますが、技術的には有効です。