2012-08-17 73 views
1

在我的Rails 3应用程序中,我的'show'视图呈现提交的表单。我想创建一个'信息'视图,显示来自同一个提交表单的不同数据。它基本上是一个备用表演视图。如何在Rails 3中渲染交替显示视图?

我要把它放到我的控制器,但它不工作:

def show 
    @form = Form.find(params[:id]) 
    end 

    def info 
    @form = Form.find(params[:id]) 
    render :layout => 'info' 
    end 

它所做的就是显示“显示”视图。我该如何纠正?

+0

这也许是奇怪的,不过你可以试试' render:layout =>“info”'布局也不同于视图。如果你在'UsersController'中执行'render'info''会渲染'app/views/users/info.html.erb',因为'render layout =>“info”'会渲染'app/views/users/info.html.erb'与布局'app/views/layouts/info.html.erb' – Max 2012-08-17 17:39:29

+0

我不遵循你想要做的事情。你有时想使用显示视图,有时想使用信息视图。或者你完全取代秀节目? – 2012-08-17 17:42:56

+0

不能取代节目视图...我希望能够同时观看两个节目。 – user1429496 2012-08-17 17:56:16

回答

0

这个问题必须在别处,因为这两个行为看起来不错。在此示例中,您的show操作应使用show视图,并且您的info操作应使用info视图(尽管布局也称为“信息” - 您可能需要考虑重命名,以免混淆布局和你的看法)。

你确定你的路线设置正确吗?您是否为您的Form模型设置了“信息”路线?即

的routes.rb:

resources :forms do 
    get :info 
end 

,并您导航到正确的网址是什么? (在这种情况下,http:// yourhost/forms/123/info)?

+0

我尝试了你的建议...没有工作。我认为问题的确在于路线。点击'show'视图可以看到:http:// localhost:3000/forms/4。是否可以点击“信息”链接,转到相同的地址,但只是查看数据不同? – user1429496 2012-08-17 18:03:09

+1

不,每个网址只有一个动作,你需要设置一个这样的路线,然后链接到/ forms/4/info,尝试form_info_path(表单)。 – mckeed 2012-08-17 18:07:56

+0

除了上面的评论,不仅是不可能的(没有在别处指定某种开关),你*不应该那样做。您希望您在URL中看到的数据表示是可预测的。如上所述,使用你的'info'动作。 – 2012-08-17 19:12:45

-1

您可以拨打

def info 
    @form = Form.find(params[:id]) 
    render :action => 'show' 
end 

,它会使用该信息的方法定义的@form实例变量,确保你有适当的路由设置