2013-08-02 2 views
2

У меня есть этот код в моих рельсах 3,2 Применениярельсов выбрать с включает

User.includes(:profile).limit(10) 

который выбрать все поля из таблицы профилей Мне нужен способ, чтобы выбрать на конкретных полей из таблицы профилей для уменьшения дб запросов Я использую postgresql

+2

возможный дубликат - HTTP ([Rails 3 выберите с Include?]: // stackoverflow.com/questions/4047833/rails-3-select-with-include) – Benj

ответ

5

Я думаю, что вы, попросите select способ.

User.includes(:profile).limit(10).select(:field1, :field2) 

Update:

Ответ от @Hassan woudn't действительно работает. Посмотрите here (нетерпеливого раздел загрузки)

Since only one table is loaded at a time, conditions or orders cannot reference tables other than the main one.

Попробуйте следующее:

class User < ActiveRecord::Base 
    has_one :profile_w_name, -> { select(:id, :name, :user_id).limit(10) }, class_name: 'Profile' 
end 

User.includes(:profile_w_name).first.profile_w_name 

Не забудьте добавить user_id поле, так как AR будет пытаться поджать профиль поля.

Update:

Я считаю, лучшее решение для всех выше, после того, как видеть неодобрение жалуется жадную загрузку и SQL фрагмент кода ссылки как select("post.id, comment.post_id"). Требуется Rails 4.

User.includes(:profile).select(:field1, :field2).references(:profile) 

проверка Кроме этого суть, чтобы увидеть разницу https://gist.github.com/astery/6137727

+0

Он выберет из таблицы users Я хочу выбрать определенные поля из таблицы профилей –

+2

Ваше неверное обновление. Это не будет работать. – zach

+0

Почему вы так думаете? Вы пытались понять суть? – Astery

4

Вы лучше использовать что-то вроде

User.joins(:profile).select("users.*, profiles.field1, profiles.field2").limit(10) 
Смежные вопросы