3

会計/財務レール アプリのバックエンド作業 (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 を使用した回答は、安全性は低くなりますが、技術的には有効です。

4

0 に答える 0