[英]Making conditions in a Rails 'includes' query dynamic
看起来很简单的任务提出了一些在我的Rails应用程序中设置关联的问题。
我有一个用于Games
的模型,其中包括带datetime的game_start
列以及指定游戏类型的category
列。 该表可能如下所示:
我可以使用Quiz.all
显示所有可用游戏的Quiz.all
,并按game_start
时间排序。 不过,我想要做的是显示用户的游戏,他们已经签署了在Registration
模式。 该模型包括:
现在,我要做的是使用控制器仅返回current_user
已注册的未来游戏(>Time.now)
结果。
@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
嘿,而不是使用&&
您可以在此处使用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 %>
你可以试试
game = Game.first
game.registration
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.