看起来非常简单的任务在我的Rails应用程序中设置关联时遇到了一些问题。
我有Games
的模型,其中包含game_start
的列,其中包含日期时间以及指定游戏类型的category
列。该表可能如下所示:
我可以使用Quiz.all
显示所有可用游戏的列表,按game_start
时间排序等。但是,我想要做的是向用户显示他们在Registration
模型中注册的游戏。该模型包括:
现在我要做的是使用控制器仅返回(>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: ???) [...]
Game
和Registration
表共享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
答案 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