2011-03-06 70 views
5

動作我有一個SettingsController用行動賬號輪廓,並且也是一個更新,看起來像:渲染髮起更新

def update 
    @player = current_user 
    if @player.update_attributes(params[:player]) 
     flash[:success] = "Profile updated." 
     redirect_to :back 
    else 
     @title = "Edit" 
     render 
    end 
end 

現在的配置文件和帳戶操作各有一個相應的視圖,用一個表單來編輯Player模型的一些記錄。

當您嘗試保存這些表單之一,並且它失敗,即。它沒有通過驗證,它應該再次初始化更新的操作,因此它可以顯示適當的錯誤消息。

但問題是,我怎麼知道哪兩個請求更新,並呈現正確的?基本上某種相當於redirect_to:back是我在這裏尋找的東西。

回答

18

這是醜陋的,但工程:)

render Rails.application.routes.recognize_path(request.referer)[:action] 
+9

你是一個瘋狂的科學家。 – tadman 2011-03-06 00:46:32

+1

...我想這是一種恭維:) – apneadiving 2011-03-12 21:45:08

+0

你說得對,這是醜陋的..!但如果它有效......你知道自2011年以來有沒有新的東西出現?謝謝!!! – Cedric 2016-03-04 15:57:22

-1

通常你可以通過應用模式解決這個問題:

def edit 
    @title = "Edit" 

    # ... 
end 

def update 
    # Update using the exception-generating variant 
    @player.update_attributes!(params[:player]) 

    # ... More actions if successful 

rescue ActiveRecord::RecordInvalid 
    self.edit 
    render(:action => 'edit') 
end 

這通常是由具有before_filter處理該模型的加載簡化實例爲你。

因爲這可以用很多,有時你可以換行到一個代表團方法:

def fallback_render(action) 
    send(action) 
    render(:action => action) 
end