Rails 4 ActionController :: Update方法中的UnknownFormat错误

时间:2014-06-02 16:18:35

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

当我调用Update方法时,我收到以下错误。

ActionController::UnknownFormat (ActionController::UnknownFormat):
  app/controllers/devise/custom/registrations_controller.rb:21:in `update_avatar'

这是违规控制者:

class Devise::Custom::RegistrationsController < Devise::RegistrationsController

  respond_to :html, :js

  def update_avatar
    @user = current_user

    if @user.update(user_params)
      respond_to do |format|
        format.js { render 'update_avatar'}
        flash[:notice] = "Updated user"
      end
    else
      render 'edit'
    end
  end

  protected
    def user_params
     params.require(:user).permit(:avatar)
    end
end

奇怪的是,我在其他控制器上使用这种方法没有任何障碍,但在这里它落在respond_to线上。

任何人都可以光明吗?谢谢!

日志

  

由Devise :: Custom :: RegistrationsController#update_avatar as处理   参数:{&#34; utf8&#34; =&gt;&#34;✓&#34;,&#34; remotipart_submitted&#34; =&gt;&#34; true&#34;,   &#34; authenticity_token&#34; = GT;&#34; reTaOwTtvbI + IPYq1nvLWl0blVOmaSu / o5VpfGziguo =&#34 ;,   &#34; X-Requested-With&#34; =&gt;&#34; IFrame&#34;,&#34; X-Http-Accept&#34; =&gt;&#34; text / javascript,   application / javascript,application / ecmascript,   application / x-ecmascript, / ; Q = 0.01&#34 ;,   &#34;用户&#34; = GT; {&#34;化身&#34; = GT;#,   @original_filename =&#34; translate.jpg&#34;,@ content_type =&#34; image / jpeg&#34;,   @headers =&#34; Content-Disposition:form-data;命名= \&#34;用户[化身] \&#34 ;;   filename = \&#34; translate.jpg \&#34; \ r \ nConContent-Type:image / jpeg \ r \ n&#34;&gt;}}

4 个答案:

答案 0 :(得分:1)

我认为您的错误是由于此行render 'edit'造成的。您应该在使用 format 时指定 respond_to

更新您的 update_avatar 方法,以便

def update_avatar
  @user = current_user

  if @user.update(user_params)
    respond_to do |format|
      format.js { render 'update_avatar'}
      flash[:notice] = "Updated user"
    end
  else
    format.html { render 'edit' } # here
  end
end

答案 1 :(得分:0)

{ render 'update_avatar'}中的format.js { render 'update_avatar'}部分不需要,因为它会尝试默认加载名为update_avatar.js的文件。

你真的有这样的js文件吗?

您还可以使用format.js {render "alert('Hello World');"}进行测试,看看它是否正常工作。

答案 2 :(得分:0)

我认为你应该尝试:

format.js { render 'update_avatar',
        flash[:notice] = "Updated user"}

和btw deyan是对的! format.js渲染默认情况下渲染update_avatar.js你不需要指定它。

答案 3 :(得分:0)

对我来说,答案是完全重写自定义控制器。我遵循了本指南:http://natashatherobot.com/devise-rails-sign-in/并相应地重新考虑了我的代码。在处理这样的事情之前,它还有助于更多地了解Devise!

感谢所有的贡献。在网上寻求帮助的最佳地点,请放下!