我正在用Rails制作一个聊天室应用,我有3张桌子,如下所示:
用户id
,name
客房id
,user_id
,title
参与者id
,room_id
,user_id
users
和rooms
具有以下关联。
# user.rb
has_many :rooms
# room.rb
belongs_to :user
我希望能够通过以下方式显示参与者的姓名列表:
# rooms/show.html.erb
<% @participants.each do |participant| %>
<%= participant.user.name %>
<% end %>
在我的控制器中,我尝试过:
# rooms_controller.rb
def show
@participants = Participant.includes(:users).where(room_id: 1)
end
但是我说
Association named 'users' was not found on Participant; perhaps you misspelled it?
时出错。我感觉在
users
和participants
之间设置关联可能会解决该问题,但是我不确定它们之间的关系。 (这不是简单的has_many
/ belongs_to
关系,对吗??)总的来说,我想运行类似
SELECT * FROM participants INNER JOIN users ON participants.user_id = users.id WHERE participants.room_id = 1
的SQL查询。如何编写Rails来运行此查询? 最佳答案
我认为User
和Room
之间的关系是多对多的。然后,使用:has_and_belongs_to_many
:
https://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association
但是,如果要将User
和Participant
之间的关系设置为多对多,请使用选项:through
:
https://guides.rubyonrails.org/association_basics.html#the-has-many-through-association
我认为,表Participant
不是必需的,只是临时变量participants
似乎可以。
关于mysql - 如何在Rails中编写代码以在SQL中运行所需的查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54273272/