【发布时间】:2018-06-13 14:16:47
【问题描述】:
给定一个名为 Event (id, name) 的模型和一个名为 EventUser (event_id, user_id) 的模型,我遍历事件。在此迭代期间,我会根据 EventUser 的存在来显示登录用户是否正在参加活动。标准的东西。
我知道我可以对每个事件执行查询,并且有诸如
之类的东西class Event < ActiveRecord::Base
def user_attending?(user)
event_users.find_by(:user_id => user.id)
end
end
但这不是很干净、高性能或可扩展。
我可以从事件列表中加载所有用户参加的事件,例如,
@events = Event.all
@attending_events = current_user.event_users.where(:event_id => @events.map(&:id))
哪个更好,但不是很好。我可以用这个为我的事件模型添加一个访问器并遍历@attending_events,但这似乎很恶心。
我想在我的理想情况下,我可以在events.id = event_users.event_id 和event_users.user_id = current_user.id 上加入两个表,如果该行存在,我可以将/a 结果列标记为@987654326 @
我如何使用 Arel 或 ActiveRecord 甚至 SQL 来做到这一点?在这里使用 PostgreSQL。
【问题讨论】:
标签: ruby-on-rails postgresql activerecord arel