2016-02-22 39 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 %> 

夠簡單。讓我知道是否有更好的方法。

相關問題