我在Rails中制作游戏,每天在不同的时间有多个游戏。在我的Pages Controller中,我向用户展示了接下来的四个可用游戏是:
@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
最佳答案
这可能不是最佳策略,但我想出了一种方法来实现我的核心目标:在Reservation
表中查询具有现有保留的游戏,然后从视图中单独的game_start
表中显示Quiz
时间。
在我的控制器中,我只使用了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 %>
很简单。让我知道是否有更好的方法。
关于mysql - 合并 View 中多个Rails表中的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35544375/