11

アプリケーションをRails 4にアップグレードしていますが、この方法の何が問題なのか、一生わかりません。違反者の更新方法:

def update
  respond_to do |format|
    if @doc.articles.find_index { |a| a.changed? }
      @doc.publications.destroy_all
    end
    if @doc.update_attributes(params[:doc])
      @doc.create_activity :update, owner: current_user
      if current_user.brand.editable? && params[:editing]
        format.html { redirect_to editing_url(@doc) }
      else 
        format.html { redirect_to share_url(@doc.user.ftp, @doc) }
      end
    end
  end
end

クリックすると、次のsubmitエラーが生成されます。

ActionController::UnknownFormat in DocsController#update

次の行を強調表示します。

respond_to do |format|

create メソッドは正常に動作します。次のようになります。

def create
  @doc = Doc.new(params[:doc])
  respond_to do |format|
    if @doc.save
      @doc.create_activity :create, owner: current_user
      if current_user.brand.editable? && params[:editing]
        format.html { redirect_to doc_editing_url(@doc) }
      else 
        format.html { redirect_to share_url(@doc.user.ftp, @doc) }
      end
    else
      format.html { render action: "new" }
    end
  end
end

何か考えはありますか?私は完全に立ち往生しています。

ああ、私もこのプライベートメソッドを持っているbefore_actionので、そうではありません:

private

def set_document
  @doc = Doc.find(params[:id])
end

編集

私はこの準説明を見つけました:

Rails 4.0 では、アクションがリクエスト形式を処理しない場合に ActionController::UnknownFormat が発生します。デフォルトでは、例外は 406 Not Acceptable で応答することによって処理されますが、これをオーバーライドできるようになりました。Rails 3 では、406 Not Acceptable が常に返されていました。オーバーライドはありません。

これはルートと関係があると思いますが、ルートをそのように宣言した場合、ルートはデフォルトである必要があります。

resources :docs, :except => [:new, :show] do
  get "adjust/:state" => "docs#adjust", :as => :adjust
  patch "editing" => "docs#editing", :as => :editing
  patch "reupdate/" => "docs#reupdate", :as => :reupdate
  get "pdf" => "docs#pdf", :as => :pdf
  collection { post :sort }
end

編集2

JSON をコントローラーに追加します。つまり、次のようになります。

format.html { redirect_to share_url(@doc.user.ftp, @doc) }
format.json { render action: 'share', status: :created, location: @doc }

メソッドなしのエラーが表示され、編集ページにリダイレクトされるようです。

Showing .../fin/app/views/docs/_form.html.erb where line #19 raised:
undefined method `covers?' for nil:NilClass

ここで何が起こっているのか本当にわかりません。

4

2 に答える 2

2

考えられる理由の 1 つは、更新メソッドで実行されているフォーマット ブロックが@doc.update_attributes(params[:doc])返されない場合です。false

通常edit、その場合はアクションをレンダリングしています。

于 2013-06-14T16:52:12.753 に答える
1

HTML のみを提供している場合は、まったく必要respond_toありませんformat.html

于 2014-02-15T21:11:42.993 に答える