3

我正在为会计/财务 Rails 应用程序做一些后端工作(xls-scraping),我希望允许表接受同一列的多个会计实体标签

所以我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上面提到的别名(第二个命名变量),当 :net_rental_income 被传递到 DouglasAudit 实例 ( d[:net_rental_income]) 时,什么也不会发生。由于 ar_object[:col] 方法的性质,不会引发错误,但不会保存数据。

我真的很喜欢能够使用 ar_object[:col] 方法进行动态编程。这是怎么回事?有什么好的方法可以解决这个问题?

-- 我试图避免使用 eval() 但使用 eval 的答案在技术上仍然有效,尽管安全性较低

4

0 回答 0