ユーザーと設定モデルの間にhas_oneの関連付けがあります。編集および更新アクションを備えたSettingsControllerもあります。フロントページには、設定を編集するためのリンクがあります。
<%= link_to (settings_path(current_user.setting)), do %>
..
<% end %>
これにより、ActionController :: RoutingErrorが発生します。フロントページを表示しようとすると、{:controller => "settings"、:action =>"edit"}..に一致するルートがありません。
なぜこれが起こっているのか、頭をぶつけて立ち往生しました。ユーザー認証にDeviseを使用する場合、このcurrent_userはグローバル変数である必要があります。
ルートがroutes.rbでどのように定義されているかを次に示します。
resources :setting, :only => [:edit, :update]
match '/settings/:id' => "settings#edit", :controller => :setting, :as => :settings
レーキルートが返すものは次のとおりです。
edit_setting GET /setting/:id/edit(.:format) {:action=>"edit", :controller=>"setting"}
setting PUT /setting/:id(.:format) {:action=>"update", :controller=>"setting"}
settings /settings/:id(.:format) {:controller=>"settings", :action=>"edit"}
もう1つの推測は、has_oneアソシエーションを使用する場合、コントローラー名(SettingsController)は複数形ではなく、単数形である必要があるということです。奇妙な理由で、Railsは非常に存在しているにもかかわらず、私のコントローラーに気づいていません。
ヘルプをいただければ幸いです。