2013-05-06 2 views
1

У меня есть модель сделки с большим количеством ассоциаций. Одна из ассоциаций - Валюта. Таблица сделок и таблица валют имеют столбец имен. Теперь у меня есть следующий запрос: ActiveRecordКак работает «select column as»?

Deal. 
    joins(:currency). 
    where("privacy = ? or user_id = ?", false, doorkeeper_token.resource_owner_id). 
    select("deals.name as deal_name, deals.date as deal_creation_date, deals.amount as deal_amount, currencies.name as currency_name, currencies.symbol as currency_symbol") 

Этот запрос не работает, его результатом является массив Deal объектов без атрибутов. По словам кого-то из IRC, части «как» неверны, потому что ORM не знает, как назначить столбцы, для которых атрибут (или что-то в этом роде) является достаточно справедливым. Я попытался добавить attr_accessor и attr_accessible, но это не сработало.

Как я могу выполнить вышеуказанный запрос, пожалуйста? Я ожидаю, что результатом будет объект Array of Deal с deal_name, deal_creation_date и т. Д. Виртуальными атрибутами.

ответ

2

Скорее всего, запрос работает правильно, но возвращенные объекты сделки не имеют никаких атрибутов при их распечатке из-за способа, которым Deal реализует метод inspect.

Так что, если вы присвоить результат запроса к переменной, вы увидите, что это кажется пустым:

v.each do |deal| ; puts deal.inspect ; end 

В то время как это показывает атрибуты, которые вы хотите:

v.each do |deal| ; puts deal.to_yaml ; end 

Более подробная информация в this question.

+0

Хорошо, что работает для меня. За исключением ассоциаций/объединений. Например, возьмите этот запрос: «Deal.joins (: currency) .where (« deals.privacy =? Или deals.user_id =? », False, 4) .select (« deal.name as deal_name, deals.date as deal_date, deals.amount как deal_amount, currencies.symbol как валюта "). as_json'. В этом примере 'currency' является' nil', хотя он не должен быть (поскольку он имеет значение в БД). Однако его значение является особым символом. Это проблема? –

+0

Возможно, особые символы вызывают проблему с валютой. Вы можете попробовать поставить '# encoding: UTF-8' в верхней части файла. [Вот пример] (http://stackoverflow.com/a/6916663/1450420) того, кто решает, что может быть аналогичной проблемой. –

+0

Я не понимаю, что все работает нормально, если я не использую «как "в предложении select (включая специальный символ в json). Поэтому я сомневаюсь, что источником проблемы являются специальные символы ... –