我正在用Rails制作一个聊天室应用,我有3张桌子,如下所示:


用户idname
客房iduser_idtitle
参与者idroom_iduser_id


usersrooms具有以下关联。

# 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?时出错。
我感觉在usersparticipants之间设置关联可能会解决该问题,但是我不确定它们之间的关系。 (这不是简单的has_many / belongs_to关系,对吗??)

总的来说,我想运行类似SELECT * FROM participants INNER JOIN users ON participants.user_id = users.id WHERE participants.room_id = 1的SQL查询。如何编写Rails来运行此查询?

最佳答案

我认为UserRoom之间的关系是多对多的。然后,使用:has_and_belongs_to_many

https://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association

但是,如果要将UserParticipant之间的关系设置为多对多,请使用选项: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/

10-16 22:59