使用命名范围时,我得到“堆栈级太深”错误

时间:2010-06-16 17:23:35

标签: ruby-on-rails

我在rails 2.3.8上使用ruby,当我编写下面显示的语法时,我得到“堆栈级太深”错误消息。

该模型名为Announcement,错误行如下所示:

Tag.find(category_id).announcements.published

published

的位置
named_scope :published, :conditions => "announcements.state = 'published'"

我在许多其他地方使用这个命名范围,它工作正常。

我做错了什么? (Tag和Announcement模型之间的关系是可以的,因为如果我从该行中删除“.published”方法就可以了。)

修改

模型的关系是:

class Tagging < ActiveRecord::Base
  belongs_to :announcement
  belongs_to :tag
end

class Tag < ActiveRecord::Base
  has_many :taggings
  has_many :announcements, :through => :taggings
end

class Announcement < ActiveRecord::Base
  has_many :taggings
  has_many :tags, :through => :taggings

3 个答案:

答案 0 :(得分:0)

当rails以递归方式访问相同的方法/函数时,通常会出现堆栈级太深。

尝试更改您的状况并再次检查,因为我认为可能存在冲突published

良好的调试方式将从

开始
Tag.find(category_id)

然后如果没有错误

Tag.find(category_id).announcements

然后你还可以

Tag.find(category_id).announcements.published
通过这种方式,您将找到问题的确切位置

欢呼声

sameera

答案 1 :(得分:0)

我不知道这是不是问题,但您可以尝试使用named_scope,如下所示,并告诉我们这是否有效?

named_scope :published, :conditions => "state = 'published'"

答案 2 :(得分:0)

你在哪里写了命名范围?

你应该在宣告模型中写它,你必须稍微修改它

named_scope :published, :conditions => {:state => "published"}

我认为您已将已发布的named_scope用不同的模型编写,如果我错了,请纠正我。