Rails - Active Record: переопределение условий: выберите - PullRequest
2 голосов
/ 17 марта 2010

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

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

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

@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 слишком большой.

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

1 Ответ

2 голосов
/ 17 марта 2010

Вызов 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 полем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...