Ruby on Rails 3:1x循环方法返回堆栈级别太深

时间:2014-02-27 18:55:32

标签: ruby-on-rails ruby recursion stack-level

总结一下,我有一个blog_posts控制器。 blog_posts控制器主要用作普通CRUD。但是,在模型中,我记录了state的{​​{1}}。因此,用户可以发布条目,但不会处于活动状态,这意味着没有人可以查看它。一旦他们将状态更改为活动,就可以查看它,因此建议将blog_posts保留为静态,并且用户不会更新它,但是,我们仍然允许更新,警告。

所以,我的任务是创建一个blog_post防火墙页面。当用户针对有效 warning点击edit时,会出现警告页面,然后他们必须点击继续或返回。

我的代码如下所示:

blog_post

这就是我相信它的工作方式。

  1. 用户导航到blog_post编辑页面以查找活动帖子。
  2. 编辑控制器发现帖子处于活动状态,并且用户未接受警告,并重定向到警告页面。 (Active和editing_after_active都评估为true)
  3. 在警告页面上,有两个选项(是/否)。
  4. 用户点击“是”继续。 editing_after_active属性应设置为“yes”,这意味着他们已接受警告。
  5. 他们被重定向到编辑。
  6. 再次评估标准,但这次评估为假。
  7. 呈现编辑页面。
  8. 我在这里缺少什么? Stack Level Too Deep应该是无限循环。这个循环是无限的吗?

    更新:

    def edit
      @blog = Blog.find(params[:blog_id])
      @blog_post = @blog.blog_posts.find(params[:id])
      if @blog_post.state == "Active" && @blog_post.editing_after_active.nil?
        redirect_to warning_path(@blog, @blog_post)
      end
    end
    
    def warning
      @blog = Blog.find(params[:blog_id])
      @blog_post = @blog.blog_posts.find(params[:id])
      if params[:no]
        @blog_post.update_attributes(editing_after_active: nil)
        redirect_to blog_blog_posts_path(@blog)
      elsif params[:yes]
        @blog_post.update_attributes(editing_after_active: "yes")
        redirect_to edit_blog_blog_post_path(@blog, @blog_post)
      end
    end
    

    更新:

    class BlogPost < ActiveRecord::Base
      include BlogModule
      belongs_to :blog
      has_one :visit, :as => :visitable
    
      has_many :assets, :as => :assetable, :dependent => :destroy
    
      has_many :bookmarks, :dependent => :destroy
      has_many :bookmark_users, :through => :bookmarks, :dependent => :destroy
    
      has_many :taggings, :as => :taggable, :dependent => :destroy
      has_many :tags, :through => :taggings
    
      # more has_many
    
    
      attr_accessible :tag_ids, :asset_ids # more attr_accessible
      attr_accessor :editing_after_active
    
    
      def editing_after_active
        editing_after_active
      end
    
    end
    

    更新:

    好的,在警告页面上,我尝试渲染&lt;%= @ blog_post.editing_after_active%&gt;的当前值。我试图渲染这个值时得到的堆栈级别太深了。因此,错误与最有可能设置虚拟属性有关。

    我手动设置editing_after_active的值,如下所示:     def editing_after_active     “是”   端

    这样警告表格提交就好了。因此,需要弄清楚为什么原始设置是递归的。

0 个答案:

没有答案