呈现启动更新的操作
我有一个带有操作帐户和配置文件的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
- 对于Ruby on Rails,当使用Webrick时,它是否支持并发请求和Keep-Alive,以及为什么加载.js和.png文件这么慢?
- 用设计和黄瓜测试登录
- 在form_for中了解Rails日期
- Rails 4资产管道不会使用asset_path引用其他资产来覆盖资产
- Ruby on Rails – 坚持Hartl Book第9.3.3章,未定义方法sign_in
- 需要有关将我的第一个rails应用程序部署到mediatemple(dv)的建议
- Rails 3嵌套模型未知属性错误
- 如何撤消vendor / gems bundle install
- 在rails初始化程序运行之前,在“之前”块中运行rspec