ja ja ja de ja ja ja ja ja en ja ja ja en ja ja en ja en ja en ja ja ja de nl ja ru ja ja de ja ja nb ja ja en ja ja en ja en ja ja ja ja ja ja ja ja ja ja ja ja ja cv es es ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja
Make remote: true the default. Full-page changes after submissions are rough. When using Turbolinks, a normal redirect will generate a Turbolinks.visit() call, and otherwise there's SJR. (We could consider having config.action_view.forms_remote_by_default that you could set to false, for people going old school).
turbolinksはajaxを利用したform submitの一部に対応しています。具体的にはturbolinks gemはredirect_toの挙動を差し替えており、form submitによるajaxリクエストをしたときのリダイレクト処理を非ajax時と同じ*1になるようにしています。書き換えたredirect_toメソッドは、もしget以外のajaxリクエストから呼び出された場合、302を返さずに、クライアントサイドでTurbolinks.visit()という画面遷移用のjs関数を実行するためのレスポンスを返します。この結果、ユーザとしては単にformをsubmitしてからredirect_toしたのと同じような画面遷移になります。
先程「turbolinksはajaxを利用したPOSTリクエストの一部に対応しています」と書きました。つまり対応していない部分があるということです。DHHが書いたコメントにもありますが、バリデーションエラーになった際の対応は、SJR(Server-generated JavaScript Responses)などを利用して各自でエラーメッセージを表示する処理を書かなければなりません。このあたりもうちょっとうまくできるとturbolinksもう少し普及するんじゃないのかな、という気がします*2。
最初はSJR部分を普通に書いていたのですが、統一的なインタフェースがあったほうが良さそうだな、と思ったのでgemにしてみました。
willnet/ajax_error_renderer: a validation error renderer for ajax request
ajax_error_rendererとは
render_ajax_errorという、ajaxでエラーメッセージを表示するメソッドを提供する小さなgemです。次のようにAjaxErrorRendererをincludeすると使えるようになります。
class ApplicationController < ActionController::Base include AjaxErrorRenderer end
ajaxでリクエストが来てエラーメッセージを表示する場面でrender_ajax_errorメソッドを使います
class UsersController < ApplicationController def create @user = User.new(params.require(:user).permit(:name)) if @user.save redirect_to users_path, notice: 'You created a user successfully!' else render_ajax_error model: @user end end end
すると#errorなDOMに動的にエラーメッセージが表示されるようになります
基本的な使い方は以上です。簡単ですね。どうぞご利用ください。
*1:ユーザ体験的な意味で。実際の挙動は異なります
*2:とはいえ公式でこう!というように対応するのも難しい、というのもわかる
willnet 2018-12-10 20:04
TurbolinksからTurboへの移行
弊社サービスである savanna.io はずっとTurbolinksとStimulus…
ajax_error_renderer 0.2.0をリリースした
個人的に便利に使っているajax_error_rendererなのだけど、フォ…
Rails 4.0 に入る予定の turbolinks について調べた
Rails 4.0 のデフォルト Gemfile に入るらしい、pjax っぽいこ…
Capybara の README 意訳
注意 この訳はだいぶ古い(2011年7月時のREADME)です。最新版の…
Rails 3 の I18n について
Ruby on Rails Guides: Rails Internationalization (I18n) API…
« 銀座Railsで「個人でつくるwebサービス」… find_by_sqlしたあとにkaminariでページネ… »
id:willnet はてなブログPro
べんりで楽しいwebサービスをたくさん作りたい
読者です 読者をやめる 読者になる 読者になる
@netwillnetをフォロー
失敗したテストのログだけを出力するぞ
iCARE Dev Meetup #34で登壇しました
`Thread.current[:hoge]`はスレッドローカル変数を参照していると思いきや実際はファイバーローカル変数だった