【问题标题】:Getting DoubleRenderError when doing `update_resource` for devise within ActiveAdmin在 ActiveAdmin 中为设计执行“update_resource”时出现 DoubleRenderError
【发布时间】:2017-08-31 09:46:02
【问题描述】:

我正在尝试更新设计的用户帐户,而无需在每次更改用户帐户时都更改密码。为此,我需要更改 update_resource 方法,但我得到的是 DoubleRenderErrror,但我不确定如何解决此问题。

这是我的代码:

  controller do 
    protected
    def update_resource(resource, params)
      if params.first[:password].blank?
        resource.update_without_password(params.first)
      else
         resource.update_attributes(params.first)
      end
      if resource.errors.blank?
        redirect_to admin_users_path, :notice => "User updated successfully."
      else
         render :edit
      end
    end
  end

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 devise activeadmin


    【解决方案1】:

    尝试将现有代码 redirect_to admin_users_path, :notice => "User updated successfully." 替换为 return redirect_to admin_users_path, :notice => "User updated successfully."。我希望这会有所帮助。

    【讨论】:

    • 您也可以在这里找到类似问题的解决方案。 link_here
    • 很高兴您找到了解决方案 :)
    【解决方案2】:

    我的错误是认为我正在覆盖的方法 update_resourceupdate 方法的覆盖本身,结果它不是运行我的覆盖,然后运行 ​​update 方法从而呈现/重定向两次。

    删除所有的 rendering/redirect_to 东西解决了这个问题。

    在 GitHub 上看到this issue 后我意识到我的错误,特别是这段代码 sn-p:

    def update_resource(object, attributes)
      puts "==================before update====================="
      debugger
      object.update_attributes(*attributes)
      puts "=================after update====================="
    end    
    def update(options={}, &block)
      super do |success, failure| 
        block.call(success, failure) if block
        failure.html { render :edit }
      end
    end
    

    如您所见,update 方法和 update_resource 方法是独立的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      相关资源
      最近更新 更多