2013-02-19 46 views
0

我正在执行标记系统,并且正在查询具有范围的标记对象。将类方法范围界定为current_user

例如,我想查找具有特定标记的所有用户的项目。用类方法我现在可以找到所有对象:

def self.tagged_with(name) 
    Tag.find_by_name(name).items 
end 

但是,这有一个问题。如果我要这样做:current_user.items.tagged_with(name)这个现有的方法不会返回所有的项目,而不仅仅是current_user拥有的项目吗?我想这是一个简单的查询问题,但我无法弄清楚如何将类方法更改为集合上调用的某个方法。我尝试了相反的方式,通过标签获取集合,例如... tag.items.where(:user_id => current_user.id),但在这种情况下,这是一种多对多的关系,我一直无法掌握这一点。

限制这样的查询的正确方法是什么?

+0

你能告诉你们的关系了?我是否有权假定你正在使用'acts_as_taggable'? – mathieugagne 2013-02-19 22:38:10

回答

1

在您的User类上创建一个指向Tag类的关联。

class User < ActiveRecord::Base 
    has_many :tags 
end 

然后,你可以这样做: current_user.tags.where(...)

如果您还没有到位的关联,你需要创建一个迁移有tags表引用您的users表与外国键。

0

我认为这将有助于你:

class Account < ActiveRecord::Base 
     has_many :people do 
      def find_or_create_by_name(name) 
       first_name, last_name = name.split(" ", 2) 
       find_or_create_by_first_name_and_last_name(first_name, last_name) 
      end 
     end 
    end 

    person = Account.first.people.find_or_create_by_name("David Heinemeier Hansson") 
    person.first_name # => "David" 
    person.last_name # => "Heinemeier Hansson" 

所以,基本上可以直接定义你的方法tagged_with进公会!

这个例子是从单证ActiveRecord::Associations