呈现启动更新的操作

我有一个带有操作帐户配置文件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模型的某些记录的表单。

当您尝试保存其中一个表单时,它会失败,即。 它没有通过validation,它应该呈现再次初始化更新的操作 ,因此它可以显示适当的错误消息。

但问题是,我如何知道哪一个请求更新,并呈现正确的更新? 基本上某种等效的redirect_to:back就是我在这里寻找的东西。

这很丑,但有效:)

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

通常您可以通过应用模式来解决此问题:

 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