Rails 3.1 respond_to& render_403问题

时间:2011-07-15 06:31:08

标签: rendering ruby-on-rails-3.1

我不确定它是什么。我刚从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),看看会发生什么 - 得到相同的结果。

1 个答案:

答案 0 :(得分:2)

好的,想通了。可能不是Rails问题。至少只有在运行规范时才会出现问题。

我一直在检查是否使用此页面渲染了403页:

response.should render_template("public/403.html")

不再工作了。用

替换它
response.status.should == 403

解决了这个问题。