我在使用rails的数据库中有多对多的关系。
假设我有一个如下所示的架构:
电影院
- cinema_id
- 姓名影
- movie_id
- 姓名放映时间
- showtime_id - 时间戳 - movie_id - cinema_id
所以基本上:[电影院] 1 - N [放映时间] N - 1 [电影]
在我的一个页面中,我有一个电影院ID,想要根据cinema_id显示电影,并将每部电影的放映时间分组。我不确定如何正确处理这个问题。在.Net中,我会使用SelectMany linq运算符并创建一组电影,但这似乎不存在于ruby / rails中。
我认为这样做的一种方法是做一些事情:
@showtimes = Showtime.where(:cinema_id, cinema_id)
@showtimes.each do |st|
@movies.add(st.Movie) unless @movies.include? st.Movie
end
那会起作用......但似乎......丑陋或只是我?
答案 0 :(得分:1)
如果您在模型中正确设置了关联,则应该可以执行以下操作:
控制器:
@showtimes = Showtime.where(:cinema_id, cinema_id)
查看:
<%= @showtimes.each do |showtime| %>
<p><%= showtime.movie.name %></p>
<% end %>
答案 1 :(得分:1)
根据您的架构,每个showtime记录将只有一部电影和一部电影。您可以通过这种方式轻松获得单独的列表:
@showtimes = Showtime.where(:cinema_id, cinema_id).order(:showing_at)
@movies = @showtimes.map {|s| s.movie }
您可能还想查看ActiveRecord中的.group和.includes方法。
如果你想直接看某个电影院的电影列表,你也可以这样做:
@movies = Movie.joins(:showtimes).where('showtimes.cinema_id = ?', cinema_id)
有了它,你可以循环播放电影并显示每个人的放映时间。