呈现启动更新的操作

时间:2011-03-06 00:39:08

标签: ruby-on-rails render

我有一个 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就是我在这里寻找的东西。

2 个答案:

答案 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