ドロップダウンを使用して言語 (ロケール) を切り替える多言語アプリケーションがあります。ドロップダウンから要素を選択すると、パラメーター「set_locale=es」を使用して特定のコントローラーに送信されるフォームが送信されます。常に次のメッセージで失敗します: " undefined method `permit' for nil:NilClass
"。
これは非常に明白です:
- フォームは で作成され
form_tag mymodel_path
ます。ここで、MyModel は既存の ActiveRecord モデルであり、完全な CRUD スキャフォールドを備えています。 - 「routes.rb」ファイルは
resources :mymodel
、これはルートPOST (/:locale)/mymodels(.:format) mymodels#create
が存在することを意味します。 - フォームは POST モデルで動作するため、ロケール セレクターを使用すると、コントローラーは POST を受信し、新しい MyModel を作成していると見なされるため、明らかに例外を発生させる
#create
行を呼び出すメソッド にルーティングされます。params[:mymodel].permit(:title,:and_more)
どうすればこれを解決できますか? パラメータ「set_locale」を使用した POST リクエストを #create ではなく #index にルーティングする方法はありますか?
注: Pragmatic Programmers による書籍「Agile web development with Rails」第 4 版の「15. Internationalization」の章に従っています。