Выбор столбцов из нескольких таблиц в Rails 3 - PullRequest
0 голосов
/ 08 ноября 2011

Я новичок в ORM в целом, и у меня возникают проблемы с получением Rails для генерации нормально SQL.У меня есть две таблицы, сообщения и пользователи.По сути, я хочу получить список сообщений с привязкой user_name отправителей.

Было бы замечательно, если:

  • Я получил только один столбециз пользовательской таблицы (в пользовательской таблице много столбцов, которые не нужно выделять)

  • Используется LEFT JOIN (Я хочу сообщения, даже если пользователи пропали в течение некоторого временипричина, и я не хочу, чтобы все замедлилось с помощью внутреннего соединения)

  • Мне не нужно упоминать имена внешних ключей в этом коде (у меня должно быть толькочтобы настроить их в моделях и «НЕ ПОВТОРИТЬ СЕБЯ», верно?)

У меня настроены эти модели:

class Message < ActiveRecord::Base
  belongs_to :sender, :class_name => "User", :foreign_key => "from_user_id"
  belongs_to :recipient, :class_name => "User", :foreign_key => "to_user_id"
end


class User < ActiveRecord::Base
  has_many :sent_messages, :class_name => "Message", :foreign_key => "from_user_id"
  has_many :received_messages, :class_name => "Message", :foreign_key => "to_user_id"
end

Мне очень хочется понравитьсяORM, но кажется, что до такой степени, что вам просто нужно написать запросы самостоятельно.

1 Ответ

0 голосов
/ 09 ноября 2011

Возможно, что-то вроде этого поможет (в модели сообщений):

default_scope select("messages.*, users.name as user_name").joins(:user).includes(:user)

Дело в том, что если это соединение не работает должным образом, вам нужно будет указать join () с помощью SQLфрагмент, а затем include (), вероятно, НЕ будет использовать это объединение, а скорее выполнит всего N + 1 запросов.

...