次のコマンドでスキャフォールドを生成しました:
rails generate scaffold indice valeur:decimal date:date
ゴージャスな宝石「rails-translate-routes」を使用して、URL(パス)をI18国際化でフランス語に翻訳します。
また、 config / route.rbを使用してインデックスコントローラーを名前空間(app / controller / catalogs / pub_indices_controller.rb)に配置します。
namespace :catalogs do
resources :pub_indices
end
Railsの屈折のため、結果のルートは正しくありません。単数形には「indice」ではなく「index」を使用しますが、生成には「indice」を使用し、モデルの名前はpub_indice.rbです。
catalogs_pub_indices_fr GET /catalogues/indices(.:format) catalogs/pub_indices#index {:locale=>"fr"}
catalogs_pub_indices_en GET /en/catalogs/pub_indices(.:format) catalogs/pub_indices#index {:locale=>"en"}
POST /catalogues/indices(.:format) catalogs/pub_indices#create {:locale=>"fr"}
POST /en/catalogs/pub_indices(.:format) catalogs/pub_indices#create {:locale=>"en"}
new_catalogs_pub_index_fr GET /catalogues/indices/nouveau(.:format) catalogs/pub_indices#new {:locale=>"fr"}
new_catalogs_pub_index_en GET /en/catalogs/pub_indices/new(.:format) catalogs/pub_indices#new {:locale=>"en"}
edit_catalogs_pub_index_fr GET /catalogues/indices/:id/modifier(.:format) catalogs/pub_indices#edit {:locale=>"fr"}
edit_catalogs_pub_index_en GET /en/catalogs/pub_indices/:id/edit(.:format) catalogs/pub_indices#edit {:locale=>"en"}
catalogs_pub_index_fr GET /catalogues/indices/:id(.:format) catalogs/pub_indices#show {:locale=>"fr"}
catalogs_pub_index_en GET /en/catalogs/pub_indices/:id(.:format) catalogs/pub_indices#show {:locale=>"en"}
PUT /catalogues/indices/:id(.:format) catalogs/pub_indices#update {:locale=>"fr"}
PUT /en/catalogs/pub_indices/:id(.:format) catalogs/pub_indices#update {:locale=>"en"}
DELETE /catalogues/indices/:id(.:format) catalogs/pub_indices#destroy {:locale=>"fr"}
DELETE /en/catalogs/pub_indices/:id(.:format) catalogs/pub_indices#destroy {:locale=>"en"}
だから私は少しグーグルして「インフレクター」という言葉を発見しました...それで私は私のconfig/route.rbで公式ドキュメントによって提供されたトリックを使用しました:
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'indice', 'indices'
end
そして、ルートヘルパーは大丈夫に見えます:
catalogs_pub_indices_fr GET /catalogues/indices(.:format) catalogs/pub_indices#index {:locale=>"fr"}
catalogs_pub_indices_en GET /en/catalogs/pub_indices(.:format) catalogs/pub_indices#index {:locale=>"en"}
POST /catalogues/indices(.:format) catalogs/pub_indices#create {:locale=>"fr"}
POST /en/catalogs/pub_indices(.:format) catalogs/pub_indices#create {:locale=>"en"}
new_catalogs_pub_indice_fr GET /catalogues/indices/nouveau(.:format) catalogs/pub_indices#new {:locale=>"fr"}
new_catalogs_pub_indice_en GET /en/catalogs/pub_indices/new(.:format) catalogs/pub_indices#new {:locale=>"en"}
edit_catalogs_pub_indice_fr GET /catalogues/indices/:id/modifier(.:format) catalogs/pub_indices#edit {:locale=>"fr"}
edit_catalogs_pub_indice_en GET /en/catalogs/pub_indices/:id/edit(.:format) catalogs/pub_indices#edit {:locale=>"en"}
catalogs_pub_indice_fr GET /catalogues/indices/:id(.:format) catalogs/pub_indices#show {:locale=>"fr"}
catalogs_pub_indice_en GET /en/catalogs/pub_indices/:id(.:format) catalogs/pub_indices#show {:locale=>"en"}
PUT /catalogues/indices/:id(.:format) catalogs/pub_indices#update {:locale=>"fr"}
PUT /en/catalogs/pub_indices/:id(.:format) catalogs/pub_indices#update {:locale=>"en"}
DELETE /catalogues/indices/:id(.:format) catalogs/pub_indices#destroy {:locale=>"fr"}
DELETE /en/catalogs/pub_indices/:id(.:format) catalogs/pub_indices#destroy {:locale=>"en"}
しかし、Railsは次のような「インデックス」を使用したルートの受け入れを拒否します:new_catalogs_pub_indice_path
代わりに、誤った形式を受け入れます:new_catalogs_pub_index_pathですが、rakeルートは別のことを言っています。
誰かが私が間違っていることを私に説明できますか?(Railsがこの単数形/複数形を使用していなかったらよかったのに。もっと簡単なため息があったでしょう)
=====更新=====
わかりました、私はこの質問に素早く答えることになりました。さらに検索した後、Ilは、私の「語尾変化」コードをconfig / initializers/inflections.rbに配置する必要があることに気付きました。
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'indice', 'indices'
end
公式ドキュメントはその方法を説明しています。どこにあるのかわかりません。コンテキストがconfig/route.rbについて話していたので、コードをroute.rbに入れることを考えましたが、それは間違っています。
公式文書には、インフレクターについての説明が不足しています。それは残念です^^みんなに注意してください;-)