在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}" }
但要小心零值。