Возврат пользовательских столбцов в 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}" }

Но будьте осторожны с нулевыми значениями.

Другие вопросы по тегам