ActiveRecord集合级关系访问器

时间:2011-12-23 12:57:01

标签: ruby-on-rails ruby-on-rails-3 activerecord orm relational-database

给出一个模型事件

has_many :user_events

一个模型UserEvent

belongs_to :event

我可以从单个事件对象中获取相关的user_events,如下所示:

event = Event.find(1)
user_events = event.user_events

但是对于一系列事件,是否存在等效的关系访问器?例如:

events = Event.where(:event_type => 'fun')
user_events = events.user_events

使用类似的东西返回属于任何“有趣”事件的user_events。

SELECT user_events.* FROM user_events JOIN events on (events.id = user_events.event_id) where (events.event_type = 'fun');

1 个答案:

答案 0 :(得分:0)

不,没有事件集合的关系访问者。

与此同时,你可以这样做:

events = Event.includes(:user_events).where(:event_type => 'fun')
user_events = events.map(&:user_events).flatten

由于user_eventsincludes(:user_events)急切加载。这是常用的。

当我们做这样的事情时,我们使用相同的逻辑(简化):

# controller
@posts = Post.includes(:comments)

# view
<% @post.each do |post| %>
  # display your post
  <% post.comments.each do |comment| %>
    # display each comment
  <% end %>
<% end %>