2016-02-22 37 views
0

我在Rails中制作了一个游戏,每天在不同的时间有多个游戏。在我的页面控制器,我显示的用户知道接下来的四个可用的游戏是:在视图中合并来自多个Rails表的数据

@quizzes = Quiz.where("game_start >= ?", Time.now).order(game_start: :asc).limit(4) 

Quiz模型有一个game_start列,因此这很容易。

我想为用户展示第二张表格,表明他们已经注册的。所以这将需要特定于current_user,并且需要检查Reservation表,用于表明用户是否已经注册了游戏。

这是棘手的地方。基于最好的做法是使用特定的,较小的型号,为Reservation表如下:

class CreateReservations < ActiveRecord::Migration 
    def change 
    create_table :reservations do |t| 
     t.integer :user_id 
     t.string :category 
    t.timestamps 
    end 
end 
end 

所以在我的控制,如果我使用:

@reservations = Reservation.where(user_id: current_user.id) 

它将返回category用户注册的游戏名称。这对用户来说并不是很有用。信息如game_start(游戏开始时)位于Quiz模型中,如上所述。

比方说,我在视图中将它作为表格格式化。一列使用@reservations来查询哪些category游戏已经注册(如“历史”和“体育”)。我是否也可以查询@quizzes型号 - 在表格中 - 显示相应的game_start次?

总之,我希望控制器1)向用户显示他们已经签署了(工作)游戏; 2)基于这些游戏category,查询Quiz表,也显示了game_start倍。

这可能吗?

另外,以供参考:Quiz表:

class CreateQuizzes < ActiveRecord::Migration 
    def change 
    create_table :quizzes do |t| 
     t.string :category 
     t.datetime :game_start 
     t.integer :entry 
     t.timestamps 
    end 
+0

这很简单,因为您将结果集合存储在不同的对象中。 –

+0

很高兴听到。假设我在控制器中添加了@测验。我需要在视图中做些什么来确保'history'类别的'game_start'匹配''''''''Reservation''Reservation'表中的相应对象?我可以使用'。哪里连接类别? – darkginger

回答

0

这可能不是最优的策略,但我想出了一个方法来完成我的核心目标:查询Reservation表游戏与现有保留和然后在视图中单独的Quiz表中显示game_start时间。

在我的控制,我只是用一个and声明:

@reservations = Reservation.where(user_id: current_user.id) && Quiz.where("game_start > ?", Time.now) 

然后在我的索引文件,我可以打电话从成功的两个表的数据,它看起来像它的工作:

<% @reservations.each do |reservation| %> 
    <tr> 
     <td><%= reservation.category %></td> 
     <td><%= reservation.game_start %></td> 
      <% end %> 

够简单。让我知道是否有更好的方法。

相关问题