【发布时间】:2017-06-30 12:26:30
【问题描述】:
在我的Post 模型中,当更新帖子时,我想做一个before_update 来更新我的一个属性。
class Post < ActiveRecord::Base
before_update :navid_tadding_atgs
private
def navid_tadding_atgs
self.update_attributes(added_by_me: 'yes')
end
这会导致这个错误:
Completed 500 Internal Server Error in 3539ms (ActiveRecord: 25.6ms)
SystemStackError (stack level too deep):
app/models/post.rb:167:in `navid_tadding_atgs'
app/models/post.rb:167:in `navid_tadding_atgs'
//.....
app/controllers/posts_controller.rb:70:in `block in update'
app/controllers/posts_controller.rb:69:in `update'
这是我的PostController#Update 操作:
class PostsController < ApplicationController
def update
authorize @post
respond_to do |format|
if @post.update(post_params)
format.html { redirect_to @post, notice: 'Post was successfully updated.' }
format.json { respond_with_bip(@post) }
else
format.html { render :edit }
format.json { respond_with_bip(@post) }
end
end
end
def post_params
params.require(:post).permit(:post_type, :category, :post_identity, :tags, :added_by_me)
end
PS:format.json { respond_with_bip(@post) } 是为 best_in_place gem 而我什至没有测试过并且得到了同样的错误
我已经在我的其他模型中使用了其他 after_update 和 before_update 并在同一 Post 模型中使用了 after_create,没有任何问题。
我不明白为什么我会收到这个错误。任何帮助表示赞赏。
我正在使用 Rails 4.2.4 和 ruby 2.2.1p85,我尝试使用 after_update 时出现同样的错误
【问题讨论】:
标签: ruby-on-rails ruby model before-filter