2012-04-24 159 views
0

给定一个表格,其中包含title,title_sp,title_jp等字段,并且知道用户的特定语言值(如jp),将表格字段重新映射为运行时的模型属性。就像在find(*args)的每个调用基础上设置alias_attribute一样。Rails ActiveRecord :: Base以编程方式重新映射列名

线沿线的东西:

Posts.find(:all, :conditions => {:published => true}, :language => "jp") 

,并已返回的Posts.titletitle_jp.值来填充添加理想的指针也将有它能够回落到title/title_en如果title_jp是零/空。

我一直在重复覆盖.find,但无法理清如何批量重新映射字段名称。

+0

它看起来像Schema没有很好的设计。您是试图使用现有架构还是迁移是由您创建的? – Salil 2012-04-25 07:48:56

回答

0

做这样的事是危险的。你可以用一些find_by_sql来做到这一点,但是如果你坚持这个对象,你会改变原来的标题,因为模型不会知道它不是原始值。

更好的解决方案是创建一个虚拟属性,根据参数选择最佳列返回。使用它可能有点麻烦,但这种方法更安全。编写一个包装器并不困难,因此可以通过一次调用访问整个集合,并将每个虚拟属性设置为正确的值。

如果您有多个字段可以覆盖,您可以编写一个小的解决方案为每个字段创建一个虚拟属性。如果您需要更多,请告诉我!