2012-04-25 4 views
5

Я пытаюсь найти способ условно включить связанные модели, когда я использую .to_json на модели.ActiveRecord to_json: условно включать ассоциации

В упрощенном примере, предположим, что следующие две модели:

class Foo < ActiveRecord::Base 
    has_many :bars 
end 

class Bar < ActiveRecord::Base 
    belongs_to :foo 
    attr_accessible :bar_type 
end 

я в настоящее время:

f = Foo.find "3" 
j = f.to_json(:include => { :bars => {:some, :attributes}} 

и это работает. Мне нужно найти способ сделать, это включить только экземпляры bar, которые имеют bar_type == 'what?'

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

ответ

3

Если условия не изменятся, вы можете сделать это:

class Foo < ActiveRecord::Base 
    has_many :bars 
    has_many :what_bars, :class_name=>"Bar", 
         :foreign_key=>:foo_id, 
         :conditions=>"bars.bar_type = 'what'" 
end 

f = Foo.find "3" 
j = f.to_json(:include => :what_bars) 
+0

Интересный подход. Я попробую и вернусь к вам :) – jaydel

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