合并视图中多个Rails表的数据

时间:2016-02-22 01:22:31

标签: mysql ruby-on-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个游戏(例如&#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

1 个答案:

答案 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 %>

足够简单。如果有更好的方法,请告诉我。