модель / sql объединяется в rails 3

#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.