2011-05-19 78 views
2

在我的Rails应用程序中,我有一个带有输入窗体的局部视图。该表单包含在我的应用程序的多个页面中。在部分岗位的RidesController形式保存这样的create方法:在Rails控制器中出现错误信息

RidesController.rb

def create 
    @ride = current_user.rides.build(params[:ride]) 
    if @ride.save 
    flash[:success] = "Ride created!" 
    redirect_to root_path 
    else 
    @rides = current_user.rides.paginate(:page => params[:page]) 
    render 'pages/home' # <---- WHAT GOES HERE? 
    end 
end 

我评论了行,其中我的问题是。当我们发生错误时,我需要呈现用户目前所处的相同视图。但是因为这个控制器是从部分而不是全视图调用的,所以我不知道如何告诉它来自哪个上下文。

现在,如果/ rides/new上有错误,用户将重定向到也具有表单的主页。

回答

1

您可以做到这一点的一种方法是将模板路径与表单一起传递。

添加这包括表单部分各主视图(如页/家,游戏机/新等):

<% @current_page_template = __FILE__ %> 

在您的形式部分:

<%= form_for ... do |f| %> 
    <%= hidden_field_tag 'current_page_template', 
     @current_page_template.sub(File.join(Rails.root, 'app', 'views'), '') %> 

在您的控制器:

def create 
    ... 
    if @ride.save 
    ... 
    else 
    ... 
    render params[:current_page_template] 
    end 
end 
+0

这对我有效。只有改变是String :: sub需要第二个参数,但我不能编辑答案,因为它只是两个字符的变化。 – jasonrclark 2011-05-21 15:45:04

+0

感谢您的支持 - 我修复了它。 – 2011-05-23 02:30:59