我在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
答案 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用不同的模型编写,如果我错了,请纠正我。