在Rails ActiveRecord Query中返回自定义列

我使用以下内容查询rails中的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查询中吗?

full_name方法添加到MyObj模型,然后将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) 

as_json的文档 :

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

 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 

当然。 覆盖模型中的方法…

 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 

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

 result = MyObj.where({customer: current_id}) result.map{|customer| "full_name: #{customer.first_name + customer.last_name}" } 

但要小心零值。