我使用充当类固醇插件的标签,我的网络应用程序有4个模型:
类别有两个重要的领域:
在网站上有以下两页:
故事和主题的创建如下:
我正在尝试为Category定义3个has_many关系,它使用标签来查找关联的条目,故事和主题。如果我在控制器代码中执行此操作,我将使用以下内容:
@category = Category.find(1)
@entries = Entry.find_tagged_with(@category.tags) # All Entries
@entries = Story.find_tagged_with(@category.tags) # Just Stories
@entries = Topic.find_tagged_with(@category.tags) # Just Topics
我想将它设为Category的实例方法,以便我将其调用如下:
@category.find(1)
@entries = @category.entries # All Entries
@entries = @category.stories # Just Stories
@entries = @category.topics # Just Topics
我无法弄清楚如何在/ has_many声明中指定/指定上面的类方法来使用相关类别实例进行工作。
我试过这个:
has_many :entries do
def tagged
Entry.find_tagged_with(self.tags)
end
end
但最终出现以下错误:
>> @category = Category.find(2)
=> #<Category id: 2, title: "Comics", description: "Comics", enabled: true, tags: "comics", created_at: "2009-06-22 13:29:52", updated_at: "2009-07-01 13:44:09", parent_id: nil, image: "", important: true, stories_enabled: true, topics_enabled: true, primary_tag: "comics">
>> @category.entries.tagged
NoMethodError: undefined method `tags' for #<Class:0x22781dc>
我已经尝试过this.tags和reflection.tags但是他们都抱怨一个未定义的方法,所以我肯定不明白这个方法的范围。
答案 0 :(得分:1)
我认为你想使用 proxy_owner 而不是 self 。
试试这个:
has_many :entries do
def tagged
Entry.find_tagged_with(proxy_owner.tags)
end
end
我在Association Extensions here上找到了一个很好的参考。