在Rails中创造条件包括'查询动态

时间:2016-02-24 08:53:24

标签: mysql ruby-on-rails

看起来非常简单的任务在我的Rails应用程序中设置关联时遇到了一些问题。

我有Games的模型,其中包含game_start的列,其中包含日期时间以及指定游戏类型的category列。该表可能如下所示:

  • ID:1 | 2016-02-24 03:23:00 |运动
  • ID:2 | 2016-02-25 04:10:00 |免
  • ID:3 | 2016-02-26 01:23:00 |历史

我可以使用Quiz.all显示所有可用游戏的列表,按game_start时间排序等。但是,我想要做的是向用户显示他们在Registration模型中注册的游戏。该模型包括:

  • ID |类别| USER_ID
  • 3 |体育| 215
  • 4 |免费| 301
  • 5 |历史| 215

现在我要做的是使用控制器返回(>Time.now)已注册的未来游戏current_user的结果。

  @registration = Registration.where(user_id: current_user.id).exists? && Game.where("game_start > ?", Time.now)

尽管有&&条件,但这将返回所有未来的游戏(我相信第一个条件是仅查看用户是否有任何已注册的游戏;如果是,则显示所有已注册的游戏)。我想将此过滤器仅用于我们用户注册的未来游戏。

经过研究,我发现连接表可能没有必要(或多态关联)。似乎我可以使用:includes创建此条件。

将原始控制器对象调整为具有以下内容是否可行:

  @registration = Registration.where(user_id: current_user.id).includes(category: ???) [...] 

GameRegistration表共享category个属性。在我上面的例子中,是否有可能使???动态,以便查看其他条件Game.where("game_start > ?", Time.now),返回category属性,然后使用该类别属性显示匹配的已注册游戏。

在我的示例表中,如果current_user为215,则会看到两个预留条目(ID 3和5),查询Game表,并仅返回具有匹配类别的游戏。

关于如何使用控制器提取类别并动态告知第二个条件查询同一类别的任何想法?

Game.rb

class Game < ActiveRecord::Base
   has_many :registrations
 end

Registrations.rb

 class Registration < ActiveRecord::Base
    belongs_to :user
    belongs_to :game
  end

2 个答案:

答案 0 :(得分:2)

嘿,而不是使用&&,您可以在此处使用joins作为

@registrations = Registration.joins(:game).where(user_id: current_user.id).where("games.game_start > ?", Time.now)

如果要将其加载到视图文件上,请使用includes作为

使用预先加载
@registrations = Registration.includes(:game).where(user_id: current_user.id).where("games.game_start > ?", Time.now)

用于查看文件

<% @registrations.each do |registration| %>
    <%= registration.game.game_start %>
    <%= registration.category %>
  <% end %>

答案 1 :(得分:-1)

你可以尝试

game = Game.first
game.registration