我有一个 SettingsController ,其中包含帐户和个人资料,还有一个更新,如下所示:< / p>
def update
@player = current_user
if @player.update_attributes(params[:player])
flash[:success] = "Profile updated."
redirect_to :back
else
@title = "Edit"
render
end
end
现在,每个配置文件和帐户操作都有一个相应的视图,其中包含一个用于编辑播放器模型的某些记录的表单。
当您尝试保存其中一个表单时,它会失败,即。它没有通过验证,应该再次呈现初始化更新的操作,因此它可以显示适当的错误消息。
但问题是,我如何知道哪一个请求更新,并呈现正确的更新?基本上某种等效的redirect_to:back就是我在这里寻找的东西。
答案 0 :(得分:18)
这很难看,但有效:)
render Rails.application.routes.recognize_path(request.referer)[:action]
答案 1 :(得分:-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