Rails活动记录过滤或命名范围困难

时间:2012-07-22 21:18:04

标签: ruby-on-rails ruby activerecord filtering named-scope

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

即。在我的事件控制器中,我希望能够调用类似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

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

1 个答案:

答案 0 :(得分:2)

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

class Event < ActiveRecord::Base

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

end