2011-06-07 49 views
0

我最近遇到了一些问题,因为服务内容基于current_page而导致对象无法保存?方法。我使用的是近脚手架控制器:Rails 3 - 渲染:模板与current_page不一样吗?

def create 
@topic = Topics.new(params[:topic]) 

respond_to do |format| 
    if @topic.save 
    format.html { redirect_to(topic_links_path(@topic), :notice => "New Topic Created") } 
    else 
    format.html { render "new" } 
    format.xml { render :xml => @topic.errors, :status => :unprocessable_entity } 
    end 
end 

的问题是,如果验证失败,就被逮住,然后简单地呈现我的新模板。您不在new_topic_path路由位置,导致我的视​​图助手提供错误的内容。

如果我@topic确实无法保存,我可以做一个redirect_to的,但我不知道如何维护和重定向后显示错误?

无论如何,寻找一些优雅的方式来做到这一点的帮助。

编辑为澄清:

基本上,我在做什么是基于服务的CURRENT_PAGE的不同的工具栏。所以dev.app:3000/topic/new有不同于dev.app:3000/topic的工具栏。

对于我的控制器,如果@topic未能保存,它将呈现新的动作,但仍会转到dev.app:3000/topics路径而不是保留在/ topics/new路径上,因此显示错误的工具栏。

回答

4

你应该重新考虑你的自定义工具栏显示的东西是如何工作的,而不是使用current_page?你应该使用action_name,并检查它是否等于newcreate

+0

大, !这是我需要的。万分感谢。 – Kombo 2011-06-07 20:49:12

+0

绝对同意这个答案,但问题让我好奇,为什么它不呈现在/新路径中的HTML?您显然可以重定向到新的_ * _路径,但会丢失错误信息。 – 2011-06-07 20:51:31

+0

因为在'new'观点的帖子,其按照铁路的REST约定'create'行动的形式 - 使用相同的URL'index'(但它是一个POST而不是GET)。 – smathy 2011-06-07 21:00:19

0

而是重定向呼叫:

render :action => :new