在Rails ActiveRecord Query中返回自定义列

时间:2015-06-30 15:21:53

标签: ruby-on-rails ruby

我正在使用以下内容查询我的ActiveRecords:

result = MyObj.where({customer: current_id}).as_json()

返回了两列:

result = [{id:1, name: "david", last_name: "Smith:"}]

我想创建第三列(不会保存到数据库中),如下所示:

result = [{id:1, name: "David", last_name: "Smith:", full_name:"David Smith"}]

这在WHERE查询中是否可行?

3 个答案:

答案 0 :(得分:2)

向MyObj模型添加full_name方法,然后将methods: :full_name传递给as_json方法:

class MyObj
  def full_name
    "{name} #{last_name}"
  end
end

result = MyObj.where({customer: current_id}).as_json(methods: :full_name)

来自the documentation for as_json

  

要在模型上包含一些方法调用的结果,请使用:methods:

user.as_json(methods: :permalink)
# => { "id" => 1, "name" => "Konata Izumi", "age" => 16,
#      "created_at" => "2006/08/01", "awesome" => true,
#      "permalink" => "1-konata-izumi" }

或者,您可以覆盖模型上的as_json以默认包含full_name

class MyObj
  def full_name
    "{name} #{last_name}"
  end

  def as_json(options={})
    super({methods: :full_name}.merge options)
  end
end

答案 1 :(得分:1)

不确定。覆盖模型中的方法......

class MyObj < ActiveRecord::Base

  def full_name
    "#{name} #{last_name}"
  end

  def as_json options={}
    {
      id: id,
      name: name,
      last_name: last_name,
      full_name: full_name
    }
  end
end

答案 2 :(得分:0)

快速而肮脏只是操纵你得到的结果

        try:
            proID = columnLookup(URL, "Product ID:")
            fh.write(str(proID).strip())
            fh.write("\t")
            if len(PID[pageNo - 1]) < 8:
                fh.write("\t")
        except:
            fh.write("\t\t")

但要注意零值。