1

我定义了以下一组类和关系,我希望能够构建所有事件的集合,其中至少包含一个特定用户已被标记的故事。

即在我的事件控制器中,我希望能够调用类似 Event.events_user_is_in(@user) 的东西,它返回包含用户已被标记的故事的每个事件。

class Event < ActiveRecord::Base
  has_many :stories
end

class Story < ActiveRecord::Base
  belongs_to :event
  has_many: tags
end

class Tag< ActiveRecord::Base
  belongs_to :story
  belongs_to :user
end

class User< ActiveRecord::Base
  has_many :tags
end

我一直在阅读有关范围界定的内容,并成功地在 Story 上生成了范围界定,它只返回用户被标记的故事,但我看不到如何为事件执行此操作。任何帮助将不胜感激!

4

1 回答 1

2

如果您愿意,可以使用方法或范围:

class Event < ActiveRecord::Base

  scope :events_user_is_in, lambda {|user|
    joins(:stories => :tags).where("tags.user_id = ?", user.id).uniq
  }

end
于 2012-07-22T21:45:50.260 回答