私はフォームを持っています。レコードが正常に更新されたら、特定のページにリダイレクトするだけです。レコードが失敗すると、ページ上の要素を更新するjavascriptで応答したい。UJS成功した場合はhtml、失敗した場合はjsに応答してください。
現在、私のフォームはremote: true
を使用していません。したがって
<%= form_for @my_model do |f| %>
...
<%= f.submit %>
<% end %>
、CONTENT_TYPEヘッダContent-Type:application/x-www-form-urlencoded
、換言すれば、HTMLのJavaScriptないで応答することが期待されます。
def update
respond_to do |format|
if @my_model.update(my_model_params)
format.html do
redirect_to @my_model
end
else
format.js
end
end
end
保存が成功すると、正しくリダイレクトされます。保存による検証エラーに失敗したときしかし、むしろ、JSへの対応よりも、私は例外を取得:
ActionController::UnknownFormat
は、どのように私はレールがJSの形式を認識してもらうことができますか?
私はフォームにremote: true
を追加し、私は、成功のためformat.js
で
format.js do
redirect_from_document_type
end
をformat.html
を交換する場合、それはJSに応えんが、何のリダイレクトは起こりません。代わりに、私は、ブラウザのレスポンスヘッダに以下を参照してください。
Turbolinks.clearCache()
Turbolinks.visit("http://localhost:3000/court_records?global_filter_id=12", {"action":"replace"})
リモートUJS呼び出しを行う場合は、 'form_for'メソッドに' remote:true'オプションを渡します。しかし、成功したアップデートでJSレスポンスを送る必要があります。 –
@Arun Kumar私は成功のJSを送信したくないです。私はちょうど私の質問に示されているようにリダイレクトしたい。 – Donato
私はあなたが誤解したと思います。エラーを解決するには、 'remote:true'オプションが必要です。しかし、それを追加すると、要求はオブジェクトが更新されているかどうかにかかわらずJS応答を期待します。それは理にかなっていますか? –