我在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
个游戏(例如&#34;历史记录&#34;以及&#34;体育&#34;)。我是否还可以在表格中查询@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)
这可能不是最佳策略,但我找到了实现核心目标的方法:查询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 %>
足够简单。如果有更好的方法,请告诉我。