2008-12-04 58 views
2

如何在restful控制器中執行操作而不是重定向後呈現。Rails REST風格的控制器和自定義操作後的渲染

我有一個標準操作的控制器,並且我添加了一個特殊的操作,通過#show頁面上的表單(想想關於帖子的評論)向有問題的資源添加數據。我正在驗證表單中的輸入,並希望在錯誤時重新呈現show動作,並在成功時重定向到show動作。

我想渲染以保存用戶輸入他們的信息兩次,但是當我嘗試渲染顯示操作時出現flash [:notice]錯誤,我得到一個錯誤,說我沒有指定一個ID。當我指定一個ID時,它會嘗試渲染一個尚不存在的新模板。

我想,這應該是一個簡單:

def add_comment 
    if my_validation? 
    save the object 
    redirect_to :action => "show", :id => params[:id] 
    else 
    render :action => "show", :id => params[:id] 
    end 
end 

這不是我的實際代碼,只是我放在一起剛纔作爲例子。

回答

2

,最好的辦法是重新呈現:新

def create 
    @obj = TheObject.new(params[:object]) 
    render :action => :new unless @obj.save 
end 

而在new.html.erb

<% form_for :obj, 
    :url => object_url(@obj), :html => {:method => :post} do |f| %> 

    <%= f.text_field :name %> 
<% end %> 

這樣一來,在表單中輸入將預填與用戶輸入的內容。

0

創建一個新的數據對象並從表單中添加值,然後重新渲染,然後認爲它會起作用。如果您仍然遇到問題,請嘗試設置一個布爾值來編輯新的和現有的行,或者完全創建兩個不同的視圖。

我以前做過,但我不太清楚。有時當我使用MVC模式的非常典型的用法時,它幾乎是「自動的」,在其他情況下(因爲我必須使用古怪的數據庫),我必須自己編寫所有的魔法;有時使用ActiveRecord對象上的.new?函數(或它被稱爲),另一種情況是我使用ID的臨時「魔術值」(通常是無效的id值的字母串)。一段時間,因爲我編碼的Rails代碼...)