背景
1.我有User
1.我有Event
User
可以参加多个Events
1.我有一个EventUser
"通过"表。
1.我在User
模型上有一个名为:events_attending
的关联。
1.我在Event
上有past
和future
示波器
∮我想达到的目标∮
我希望能够使用类似于下面的语法来拆分用户正在参加/已经参加的事件-无论正确的等价物是什么。
current_user.events_attending.past
但是我知道我不能,因为events_attending
是一个关联,即使这样,我的理解是它是到EventUser
的关联,而不是Event
,所以作用域仍然不能应用。
我怎样才能做到这一点,这样我就可以做一些像我在上面的代码行中所展示的事情?
有用的源代码
Event.rb
:
class Event < ApplicationRecord
scope :future, -> { where("time > datetime()") }
scope :past, -> { where("time < datetime()") }
has_many :event_user
has_many :attendees, through: :event_user, source: :user
belongs_to :author, class_name: "User", foreign_key: "user_id"
end
User.rb
class User < ApplicationRecord
has_many :events
has_many :events_attending, class_name: "EventUser"
end
EventUser.rb
class EventUser < ApplicationRecord
belongs_to :user
belongs_to :event
end
为了简洁起见,我删除了像设计特性和验证这样的内容。
很感谢你的时间,谢谢。
2条答案
按热度按时间b4qexyjb1#
您可以尝试以这种方式设置
Event.rb
类和User.rb
类,看看它是否有效吗?然后可以通过
current_user.events.past
调用用户过去的事件vmdwslir2#
基于limciana的有益回答,我修改了User.rb类中的关联,如下所示:
我认为之前的问题是我的
user.events_attending
表达式会返回EventUser
记录,但是如果我简单地将它设置为返回Events
,* 到 *EventUser
,那么past
和future
作用域似乎可以无缝地工作。也就是说我现在可以
或
而且很有效。