Ruby on rails 名为route puts';的轨道';而不是'/';更新时在URL中

Ruby on rails 名为route puts';的轨道';而不是'/';更新时在URL中,ruby-on-rails,Ruby On Rails,更新#3。。。固定的!解决方案是将新的名称空间代码(get'dash',to:'dashes#show')移动到routes.rb文件的底部,就在根“活动”索引“项上方 更新#2。。。这不是一个所谓的单一的多元化,如下所示&删除命名路由会自动纠正所有问题 更新#1。。。找到了为什么没有人在URL中用句点代替斜杠的原因。。。这是unix名词,不是英语。。。IE:如果你在“.”中搜索“点”,那么你会得到各种各样的答案 我被这个弄糊涂了。。。前几天制作了我的第一个命名路由,一切看起来都很好,直到突然从

更新#3。。。固定的!解决方案是将新的名称空间代码(
get'dash',to:'dashes#show'
)移动到routes.rb文件的底部,就在
根“活动”索引“
项上方

更新#2。。。这不是一个所谓的单一的多元化,如下所示&删除命名路由会自动纠正所有问题

更新#1。。。找到了为什么没有人在URL中用句点代替斜杠的原因。。。这是unix名词,不是英语。。。IE:如果你在“.”中搜索“点”,那么你会得到各种各样的答案

我被这个弄糊涂了。。。前几天制作了我的第一个命名路由,一切看起来都很好,直到突然从命名路由调用时,编辑页面似乎没有正确更新,出现错误

No route matches [PATCH] "/dash.6"
删除命名路由会使我回到正常路由&所有选项都有效。我找不到使用“.”而不是“\”的路由,所以我迷路了。下面是我的路由文件&然后是来自rails服务器的路由结果

Rails.application.routes.draw do

  devise_for :users, controllers: { sessions: 'users/registrations' }

  # map.login '/login', :controller => 'sessions', :action => 'new'  ## 3rd try
  # get '/dash', :controller => 'dashes', :action => 'show'  ## 2nd try
  # get 'dash', to: 'dashes#show'  ## Original named route

  resources :dashes
  resources :campaigns
  resources :players
  resources :countries

  root "campaigns#index" 

  # yank later
  resources :neighborhoods
end
Paths Matching (dashes):
dashes_path     GET     /dashes(.:format)   

dashes#index
    POST    /dashes(.:format)   

dashes#create
Paths Containing (dashes):
dashes_path     GET     /dashes(.:format)   

dashes#index
    POST    /dashes(.:format)   

dashes#create
new_dash_path   GET     /dashes/new(.:format)   

dashes#new
edit_dash_path  GET     /dashes/:id/edit(.:format)  

dashes#edit
    GET     /dashes/:id(.:format)   

dashes#show
    PATCH   /dashes/:id(.:format)   

dashes#update
    PUT     /dashes/:id(.:format)   

dashes#update
    DELETE  /dashes/:id(.:format)   

dashes#destroy
服务器上的Rails结果

Rails.application.routes.draw do

  devise_for :users, controllers: { sessions: 'users/registrations' }

  # map.login '/login', :controller => 'sessions', :action => 'new'  ## 3rd try
  # get '/dash', :controller => 'dashes', :action => 'show'  ## 2nd try
  # get 'dash', to: 'dashes#show'  ## Original named route

  resources :dashes
  resources :campaigns
  resources :players
  resources :countries

  root "campaigns#index" 

  # yank later
  resources :neighborhoods
end
Paths Matching (dashes):
dashes_path     GET     /dashes(.:format)   

dashes#index
    POST    /dashes(.:format)   

dashes#create
Paths Containing (dashes):
dashes_path     GET     /dashes(.:format)   

dashes#index
    POST    /dashes(.:format)   

dashes#create
new_dash_path   GET     /dashes/new(.:format)   

dashes#new
edit_dash_path  GET     /dashes/:id/edit(.:format)  

dashes#edit
    GET     /dashes/:id(.:format)   

dashes#show
    PATCH   /dashes/:id(.:format)   

dashes#update
    PUT     /dashes/:id(.:format)   

dashes#update
    DELETE  /dashes/:id(.:format)   

dashes#destroy
我的表单是标准的rails生成的&每当我删除指定的路由时都会运行
edit.html.haml
呈现_表单的部分

%h1 Editing dash

= render 'form'

= link_to 'Show', @dash
\|
= link_to 'Back', dashes_path
\u form.html.haml

  = simple_form_for(@dash) do |f|
  = f.error_notification

  .form-inputs
    = f.input :name
    = f.association :user
    = f.association :dashcampaigns
    = f.association :dashplayers

  .form-actions
    = f.button :submit
如中所述,当您混淆集合(复数)和成员(单数)控制器动作时,通常会出现问题

集合控制器操作是一种没有ID的操作,因为它不操作现有资源(
破折号
),或者它在一组资源上工作。RESTful收集操作包括:
索引
新建
创建
。它们都有一个助手方法和一个“动词”(方法):

  • index
    url:dashes\u路径,方法::get
    (默认方法为get)
  • create
    url:dashes\u路径,方法::post
  • new
    url:new\u dash\u路径,方法::get
请注意
索引
创建
如何共享相同的复数URL帮助程序方法
破折号路径
。只有
方法
选项区分它们

成员控制器操作是一个具有其正在操作的资源ID的操作(一个特定的
破折号
)。RESTful收集操作包括:

  • edit
    url:edit_-dash_-path(@dash),method::get
  • show
    url:dash\u路径(@dash),方法::get
  • 更新
    url:dash\u路径(@dash),方法::补丁
  • destroy
    url:dash\u路径(@dash),方法::destroy
查看除了
编辑
,所有其他操作如何使用相同的单数URL帮助程序方法
破折号路径(@dash)

你可以找到更多的细节

现在,“点而不是斜线”症状是当您错误地试图以一种应该用于收集操作的方式指向成员操作时。因此,如果您尝试使用
破折号\u path(@dash)
,则不存在这种情况。唯一的参数
破折号\u path
接受的是
格式
,它被添加到URL末尾的一个点后,这就是为什么您会看到一个奇怪的URL,例如
/dash.6

Rails form builder的
form_for
和扩展(例如
simple_form_for
)需要决定是否将表单操作指向
\create
集合操作(在呈现
\new
集合操作时)或
\update
成员操作(在呈现
\edit
成员操作时)。当你为(@dash)做
simple\u form\u时,他们通过看你给他们的对象来“神奇地”做到这一点。如果
@dash.new\u object?
为true,则将窗体操作指向
\create
,如果为false,则将窗体操作指向
\update

在你的情况下,当你使用它“开箱即用”时,一切都很好。当您将这一行添加到您的
路线时,它开始对您产生影响。rb

get 'dash', to: 'dashes#show'
默认情况下,
show
成员操作,而不是集合操作。它必须收到一个ID。我想这就是为什么Simple Form会对您产生影响的原因。请尝试使用以下别名,而不是该别名:

get 'dash/:id', to: 'dashes#show'
让我们知道这是否解决了问题


一般来说,我建议“使用”RESTful路由,而不是“使用”RESTful路由。很少需要在
routes.rb
中添加命名路由。也有例外,但我认为在您的情况下,偏离惯例,尝试使用
dash/1
而不是
dash/1
是不合理的。“使用”Rails将使您获得众所周知的生产力提升,而不是通过尝试强制它处理像这样相对较小的细节来“对抗”它。

您可以发布表单吗?您在定义方法时遇到了问题(我想这就是问题所在)@rogelio…完成,ty在快速回复中,我仍然在尝试一些东西,但没有得到太多-可能在接下来的15分钟内就不得不取消它。什么意思是每当您删除指定的路由时它都会工作?上面粘贴的表单是否不会产生问题?通常,点的问题是错误地使用复数命名路由而不是单数。请参见此处:因此,在我的routes.rb文件中…如果我用命名的route注释掉该行…我的dash#edit再次工作。rails解决方案对我不起作用,甚至重新启动了服务器:(我很困惑-这是所有rails建议,哪一部分是反对rails的?一个关于路线排序的简短建议&这将是一个30秒的功能添加。编辑:链接到特定部分…接受了答案-这不是修复,但你在那里投入了最多的工作。请参阅我对问题的最后评论。)