Rails数据库查询 - 是否可以为列提供别名?

时间:2012-06-01 12:44:48

标签: mysql ruby-on-rails alias

我必须为旧的手机应用程序生成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}

我做错了什么?有没有更好的方法呢?

3 个答案:

答案 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