我有一个名字不可数的模型 - class Equipment
,在本文中(https://markembling.info/2011/06/uncountable-nouns-rails-3-resource-routing)我发现在这种情况下,我们在尝试获取模型的索引路径时会遇到问题。因此,文章提供了如何使用变形规则的提示。但是,我相信单词' Equipment'就像' person'已经被Rails理解了,我甚至不需要定义变形规则,因为我仍然得到这条路径:
equipment_index GET /equipment(.:format)equipment #index
但是,出于某种原因,在我导航到localhost:3000 / equipment_index之后,我得到了
没有路线匹配[GET]" / equipment_index"
所有其他路径都有效(如localhost:3000 / equipment)。
有什么想法可以继续......?
P.S。请不要写如何添加自定义路径。我希望以Rails方式解决这个问题 - 约定优于配置。感谢。
路线:
equipment_index GET /equipment(.:format) equipment#index
POST /equipment(.:format) equipment#create
new_equipment GET /equipment/new(.:format) equipment#new
edit_equipment GET /equipment/:id/edit(.:format) equipment#edit
equipment GET /equipment/:id(.:format) equipment#show
PATCH /equipment/:id(.:format) equipment#update
PUT /equipment/:id(.:format) equipment#update
DELETE /equipment/:id(.:format) equipment#destroy
routes.rb中:
resources :users do
member do
get 'generate_raport'
end
end
resources :client_users
resources :clients
devise_for :users, skip: [:registrations]
resources :equipment
root to: 'static#homepage'
答案 0 :(得分:2)
:root
是named route,而不是网址字符串。与此命名路由对应的url字符串在此部分中:
equipment_index
当你说:
equipment_index GET /equipment(.:format)equipment #index
你真的说GET /equipment(.:format)
是实际网址equipment_index
的命名路由(别名)。最后一部分说:
设备#索引
只是说您的请求将通过localhost:3000/equipment
控制器和相应的equipment
操作进行路由。
您只需导航至index
即可转到localhost:3000/equipment
控制器的index
页面。
例如,您可以使用rails equipment
帮助程序链接到此页面,并且上面讨论的命名路由如下:
link_to
更改将以下行直接添加到包含link_to "My index path", equipment_index_path
的行之后的routes.rb文件中。它现在看起来像:
resources :equipment
答案 1 :(得分:0)
这是对配置的约定!
您只是简单地阅读rake routes
的输出错误或对其应该如何工作有错误的期望。第一列只是主要用于创建路径助手的路径名称。实际路径位于第三列*。
equipment_index_path() # /equipment
equipment_path(1) # /equipment/1
equipment_path() # error due to missing id param
由于设备是一个不可数名词,Rails巧妙地避免了生成的路径助手不明确的问题 - equipment_path
可能导致索引操作或show动作。常规可数名词不会出现此问题,因此通常不需要_index
后缀。
# no ambiguity
cats_path() # /cats
cat_path(1) # /cats/1
虽然你可以说在这种情况下,rails应该使用id
param的存在来区分不是它的构建方式,并且可以掩盖传递nil而不是记录的错误。