Возврат пользовательских столбцов в Rails ActiveRecord Query
Я запрашиваю мои 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 ответа
Решение
Добавить 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}" }
Но будьте осторожны с нулевыми значениями.