我在用户和设置模型之间有一个 has_one 关联。我也有带有编辑和更新操作的 SettingsController。在首页我有一个编辑设置的链接:
<%= link_to (settings_path(current_user.setting)), do %>
..
<% end %>
这导致 ActionController::RoutingError No route matches {:controller=>"settings", :action=>"edit"} ..当试图显示首页时。
我有点纠结为什么会这样。使用 Devise 进行用户认证,这个 current_user 应该是一个全局变量。
以下是在 routes.rb 中定义路由的方式:
resources :setting, :only => [:edit, :update]
match '/settings/:id' => "settings#edit", :controller => :setting, :as => :settings
这是 rake 路由返回的内容:
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"}
另一种猜测是控制器名称(SettingsController)在使用 has_one 关联时应该是单数,而不是复数。出于某种奇怪的原因,Rails 没有注意到我的控制器,即使它非常存在。
帮助表示赞赏。