我不确定它是什么。我刚从3.0.9升级到Rails 3.1,这就是我的规格:
PeopleController edit action should require owner
Failure/Error: response.should render_template("/public/403.html")
expecting <"/public/403.html"> but rendering with <"search/_search_menu_item">
这完全符合我在各种控制器中的规格。我的AppController中也有这个代码:
def render_403
respond_to do |format|
format.html { render :file => "#{Rails.root}/public/403.html", :status => 403, :layout => false }
format.json { render :json => { :error => true, :message => "Error 403, you don't have permissions for this operation." } }
end
end
这在PeopleController中:
def edit
render_403 unless @person.account.id == current_account.id
end
我确定format.html
块被执行(检查它)。然而规格期望失败。不知道这里发生了什么。
(search/_search_menu_item
是包含在每个页面上的部分,这基本上意味着应用程序布局会在此处呈现。)
更新:我已将render_403
中的#edit
替换为render(:file => "#{Rails.root}/public/403.html", :status => 403, :layout => false)
,看看会发生什么 - 得到相同的结果。
答案 0 :(得分:2)
好的,想通了。可能不是Rails问题。至少只有在运行规范时才会出现问题。
我一直在检查是否使用此页面渲染了403页:
response.should render_template("public/403.html")
不再工作了。用
替换它response.status.should == 403
解决了这个问题。