#ruby-on-rails #ruby #ruby-on-rails-3
#ruby-on-rails #ruby #ruby-on-rails-3
Вопрос:
Как я могу объединить объекты с моделями, приведенными ниже?
Пользователь has_many сообщений Сообщение принадлежит пользователю Поток has_many сообщений
Я пытаюсь получить все потоки, которые принадлежат пользователю X. Я хотел бы присоединиться на message.user_id = user.user_id
и thread.message_id = message.message_id
. Я могу сделать это с помощью find_by_sql
, но я пытаюсь этого избежать.
Спасибо
Комментарии:
1.
Message
Такжеbelongs_to :thread?
не следует?
Ответ №1:
Предполагая, что ваша Message
модель также belongs_to :thread
, тогда вы должны быть в состоянии поместить has_many :threads, :through => :messages
в свою User
модель. Тогда вы могли бы просто сделать user.threads
, чтобы получить все связанные потоки.
Ответ №2:
Должно сработать следующее: (обратите внимание, что я добавил ваши недостающие message belongs_to :thread
)
class User < ActiveRecord::Base
has_many :messages
has_many :threads, :through => :messages
end
class Message < ActiveRecord::Base
belongs_to :user
belongs_to :thread
end
class Thread < ActiveRecord::Base
has_many :messages
has_many :users, :through => :messages
end
Это должно позволить вам выполнять my_user.threads
и my_thread.users
.
Вы можете прочитать больше об этом has_many :through
в руководствах Rails и в API.