2010-03-17 2 views
2

У меня довольно большая модель, и я хочу получить только выбранный набор полей для каждой записи, чтобы сохранить строку JSON, которую я строю небольшой.Рельсы - активная запись: переопределения условий: выберите

Использование: select with find работает отлично, но моя ключевая цель - использовать условную логику с соответствующей моделью. Это единственный способ сделать это с помощью ламы в именованной области? Я боюсь, что, возможно, излишне, но я хотел бы понять, есть ли способ сделать: выбрать работу с условием.

Это работает:

@sites = Site.find :all, :select => 'id,foo,bar' 

Когда я пытаюсь это:

@sites = Site.find :all, :select => 'id,foo,bar', :include => [:relatedmodel], 
        :conditions => ["relatedmodel.type in (?)", params[:filters]] 

Условием работы, но каждая запись включает в себя все атрибуты сайта, что делает мой JSON строку путь слишком большой.

Спасибо за любые указатели!

+0

Вы уверены, что условия не найдены? Я не тестировал это, но включение выглядит более подозрительным. – igul222

+0

Я мог бы быть полностью смущен, но не нужно ли включать связанную модель, чтобы применить к ней условия? Если я делаю это @sites = Site.find: all,: select => 'id, foo, bar',: include =>: relatedmodel 3 атрибута в: select - все они возвращаются как I ' м надеялись бы после добавления условия. – Nick

ответ

2

Поддержка to_json поддерживает :except и :only опции для исключения/включения полей модели во время сериализации.

@sites.to_json(:only => [:name, :foo, :bar]) 

Вызов выше сериализует Site объекты с полями name и location.

@sites.to_json(:only => [:name, :location], 
     :include => { :relatedmodel => { 
          :only => [:description] 
         } 
        } 
     ) 

Вызов выше сериализует Site объектов с полями name и location и содержал RelatedModel объекты с description поля.

+0

Это замечательно. Я не думал о том, чтобы смотреть на вызов to_json, поскольку меня повесили трубку, пытаясь получить activerecord, чтобы дать мне то, что я хотел. Это отлично работает, и мой объект JSON теперь имеет разумный размер. Благодаря! – Nick

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