我必须为旧的手机应用程序生成json feed,并且某些标签需要与我的数据库列名称不同。
我认为最有效的方法是在数据库级别创建一个别名。所以我正在做像
这样的事情Site.where( mobile_visible: true ).select("non_clashing_id AS clientID")
生成SQL
SELECT non_clashing_id AS clientID FROM `sites` WHERE `sites`.`mobile_visible` = 1 ORDER BY site_name
如果我在MYSQL工作台中运行此查询,它会按照我的预期生成一个标题为ClientID
的列,并带有所需的值。
但是如果我在rails视图中显示对象,我会得到{"clientID":null},{"clientID":null},{"clientID":null}
我做错了什么?有没有更好的方法呢?
答案 0 :(得分:2)
这显示了如何访问变量
sites = Site.where( mobile_visible: true ).select("non_clashing_id AS clientID")
sites.each do |site|
puts site.clientID
end
答案 1 :(得分:1)
除了数据库别名外,请尝试将其添加到模型中:
class model < ActiveRecord::Base
alias_attribute :non_clashing_id, :client_id
...
end
答案 2 :(得分:1)
我认为默认情况下,activerecord
会从数据库中加载列定义。并且,它应该仅将值加载到现有列中。
Site.columns
我猜你可以再向该数组添加一个项目。或者您可以使用不带别名列名的普通查询,然后像MurifoX那样添加alias_attribute
并覆盖as_json
方法:
class Site < ActiveRecord::Base
alias_attribute :client_id, :non_clashing_id
def as_json(options={})
options[:methods] = [:client_id]
options[:only] = [:client_id]
super
end
end