2013-04-05 2 views
0

У меня есть три стола, скажем, магазин, товар и item_typeКак получить значение include с условиями?

магазин содержит названия магазинов и предметов, содержащих предметы каждого магазина, а item_type содержит различные типы этих предметов вместе со статусом, например, доступным или недоступным.

Теперь я хочу сделать

format.json { render json: {:shop => @shops.as_json(:include => :items)}} 

, но на основе состояния, скажем, элементы с item_type_id = '1' и статус item_type_status = 'доступен'

ответ

1

Попробуйте это:

@shops = Shop.includes(:items).where("items.itemp_type = ?", 'accesories') 
format.json { render json: { :shop => @shops.as_json(:include => :items) } } 

Отредактировано:

One вы можете сделать это, чтобы создать хэш с объектами, которые вы хотите визуализировать, а затем передать это методу рендеринга. Нравится так:

respond_to do |format| 
    format.json { render :json => {:shops => @shops, 
            :items => @items }} 
end 

Если модели не связаны активной регистрацией, это, вероятно, ваше лучшее решение.

Если ассоциация существует, вы можете передать: включить аргумент рендер вызова, например так:

respond_to do |format| 
    format.json { render :json => @shops.to_json(:include => [:items])} 
end 

Обратите внимание, что вы не должны извлечь @items переменную в приведенном выше разделе, если вы примете такой подход, Rails автоматически загрузит его из переменной @shops.

+0

ОК как о включении статуса item_type с этим? – logesh

+0

См. Мой отредактированный ответ. –

+0

Не забудьте принять ответ. –

0

Вы можете передать метод или методы методам to_json или as_json и включить необходимые записи. Пример из Rails api:

user.as_json(:methods => :permalink) 
# => {"id": 1, "name": "Konata Izumi", "age": 16, 
    "created_at": "2006/08/01", "awesome": true, 
    "permalink": "1-konata-izumi"}