为什么此路由设置会导致这些路径变量?

时间:2015-03-12 10:16:31

标签: ruby-on-rails ruby-on-rails-4

在我的rails 4应用程序中,我在routes.rb中有一段看起来像这样:

namespace :settings do
  resources :profile, only: [:index] do
    put :update_user, on: :collection
  end
end

控制器位于app/controllers/settings/profile_controller.rb,如下所示:

class Settings::ProfileController < ApplicationController

  def index
  end

  def update_user
  end

end

这导致rake routes

的这些路径

PUT update_user_settings_profile_index - &gt; /设置/配置文件/ update_user(:格式)

GET settings_profile_index - &gt; /设置/面(:格式)

我不明白为什么这些路径中包含_index。我想摆脱它。我可以吗?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:3)

我认为这是因为您使用单数名称profile作为resources定义,按惯例应该是复数。您可以尝试使用resources :profiles

答案 1 :(得分:0)

对我而言,通过路线,向后工作总是更容易,询问我想要的路径是什么?我不确定你想要什么样的路径,但我希望我能在这里给你一些想法。

我假设您需要一个索引路径,因为您明确包含了唯一的:[:index]语句,但您不希望资源上有索引路径。

尝试将您唯一的:[:index]语句移动到外部do循环中进行设置,并仅为您的个人资料添加:[:更新](或您正在寻找的任何操作)

  namespace :settings, only: [:index] do
      resources :profile, only: [:update] do
        put :update_user, on: :collection
      end
    end

来到这里:

update_user_settings_profile_index PUT    /settings/profile/update_user(.:format)                settings/profile#update_user
                  settings_profile PATCH  /settings/profile/:id(.:format)                        settings/profile#update
                                   PUT    /settings/profile/:id(.:format)                        settings/profile#update