我在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/

10-10 04:40