私はアプリケーションをRails 4にアップグレードしていますが、この方法で何が問題なのか理解できていません。犯罪者は、updateメソッドです:submit
をクリック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
は、このエラーを生成します。
ActionController::UnknownFormat in DocsController#update
とハイライトこのライン:
:createメソッドが正常に動作しますrespond_to do |format|
、それはこのようになります
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
EDIT
私はこの準説明が見つかりました:
In Rails 4.0, ActionController::UnknownFormat is raised when the action doesn't handle the request format. By default, the exception is handled by responding with 406 Not Acceptable, but you can override that now. In Rails 3, 406 Not Acceptable was always returned. No overrides.
私はそれがルートと関係があると思うようにしますが、もし私がそうそう宣言したら私のルートはデフォルトになるはずです。
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
EDIT 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
ここでは何が起こっているのかわかりません。
フォームに 'remote:true'がありますか?それはJSを介して送信されますか?あなたのコントローラに 'respond_to:json'がありますか? – phoet
フォームには 'remote:true'はありません.JS経由では送信されません。コントローラーには「respond_to:json」はありません。わかっている限り、私はそれが必要ではないからです。 –