2015-05-24 2 views
1

Я хотел бы создать массив в моем контроллере из базовой базы данных, которую я в конечном итоге создам в JSON.Как получить массив из базы данных в рельсах

База данных называется Пользователь с полями имя: строка и значение: целое

В настоящее время у меня есть следующие в моем контроллере:

class GraphController < ApplicationController 
    def index 
    end 

    def data 
    render :json => User.select('value') 
    end 
end 

но это возвращает хэш идентификатора и значения тогда как мне нужен только массив значений. Как я могу это достичь?

+0

Try 'User.select ('значение') values' –

ответ

1

Либо карту ActiveRecord :: Relation быть массивом вашей спецификации, или использовать .pluck(), чтобы сделать это за один шаг.

class GraphController < ApplicationController 
    def index 
    end 

    def data 
    render :json => User.select('value').map(&:value) 
    # or 
    # render :json => User.pluck('value') 
    end 
end 
+0

Perfect. Это то, чего я хотел. Как образовательный момент для меня и других пользователей, я знаю, что запросы могут быть выполнены и в модели. Означает ли это, что делать такие простые запросы, как это происходит в контроллере, но более тяжелый подъем должен выполняться с использованием ActiveRecord в модели? –

+1

Любые запросы или фильтрация, вероятно, хотят быть сделаны в модели. Если ваш перевод с объекта ActiveRecord на что-то еще сложный, то это тоже может быть лучше инкапсулировано в метод модели, который вы могли бы назвать. Но для вашего примера здесь, просто выщипывая одно поле, я бы сказал, что это нормально в контроллере. – Pavling

0

Вы можете хранить массивы и хэши с использованием декларации сериализации ActiveRecord в:

class GraphController < ApplicationController 
    def index 
    serialize :value 
    end 

    def data 
    render :json => User.value['value1', 'value2'] //etc 
    end 
end 
+0

почему вы должны объявить новый контроллер после рендеринга:. JSON. Не могу ли я просто сериализовать рендер: json line? –

+0

да, вы можете это сделать @SebastianZeki –

+0

Хотя я получил ошибку NoMethodError в GraphController # index undefined метод 'serialize 'для # , и он выделяет строку serialize: value. –