2011-05-19 45 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