2012-06-01 2 views
3

Мне нужно создать json-канал для старого приложения для мобильных телефонов, а некоторые ярлыки должны отличаться от имен столбцов базы данных.Запрос базы данных Rails - возможно ли дать столбцу псевдоним?

Я думаю, что наиболее эффективным способом сделать это было бы создание псевдонима на уровне базы данных. Так что я делаю такие вещи, как

Site.where(mobile_visible: true).select("non_clashing_id AS clientID") 

который производит SQL

SELECT non_clashing_id AS clientID FROM `sites` WHERE `sites`.`mobile_visible` = 1 ORDER BY site_name 

Если я запускаю этот запрос в MYSQL верстаке она производит колонку с заголовком ClientID как я ожидаю, с требуемыми значениями.

Но если я показываю объект в рельсах просмотра я получаю {"clientID":null},{"clientID":null},{"clientID":null}

Что я делаю неправильно? Есть ли лучший способ сделать это?

ответ

1

Я думаю, что по умолчанию, activerecord определения нагрузки столбцов из базы данных. И он должен загружать значение только в существующие столбцы.

Site.columns 

Я думаю, вы можете добавить еще один элемент в этот массив. Или вы могли бы использовать обычный запрос без имени столбца псевдоним, а затем добавить alias_attribute как MurifoX сделал и перезаписать as_json метод:

class Site < ActiveRecord::Base 
    alias_attribute :client_id, :non_clashing_id 

    def as_json(options={}) 
    options[:methods] = [:client_id] 
    options[:only] = [:client_id] 
    super 
    end 
end 
1

Попробуйте положить это в вашей модели в дополнении к псевдониму базы данных:

class model < ActiveRecord::Base 
    alias_attribute :non_clashing_id, :client_id 
    ... 
end 
2

Это показывает, как получить доступ к переменной

sites = Site.where(mobile_visible: true).select("non_clashing_id AS clientID") 
sites.each do |site| 
    puts site.clientID 
end 
+0

Можете ли вы принять ответ? – Anil

Смежные вопросы