总结一下,我有一个blog_posts
控制器。 blog_posts
控制器主要用作普通CRUD。但是,在模型中,我记录了state
的{{1}}。因此,用户可以发布条目,但不会处于活动状态,这意味着没有人可以查看它。一旦他们将状态更改为活动,就可以查看它,因此建议将blog_posts
保留为静态,并且用户不会更新它,但是,我们仍然允许更新,警告。
所以,我的任务是创建一个blog_post
防火墙页面。当用户针对有效 warning
点击edit
时,会出现警告页面,然后他们必须点击继续或返回。
我的代码如下所示:
blog_post
这就是我相信它的工作方式。
我在这里缺少什么? 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 “是” 端
这样警告表格提交就好了。因此,需要弄清楚为什么原始设置是递归的。