更新#3 ......已修复!解决方案是将新名称空间代码(get 'dash', to: 'dashes#show'
)移动到root "campaigns#index"
条目正上方的routes.rb文件的底部。
更新#2 ......它不是复数,因为它被单独调用,如下所示&删除指定的路由会自动纠正所有问题。
更新#1 ...找到理由为什么没有人在URL中列出斜线代替斜线...它是unix名词,而不是英文... IE:如果你搜索' dot& #39;代替'。',然后你得到各种答案。
我被这一个弄乱了......前几天做了我的第一条命名路线,一切看起来都很棒,直到突然看来编辑页面从指定路线调用时没有正确更新,错误...
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
Rails在服务器上的结果......
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
我的表单是生成的标准轨道&每当我删除命名路线时都可以工作...... edit.html.haml
渲染_form partial ...
%h1 Editing dash
= render 'form'
= link_to 'Show', @dash
\|
= link_to 'Back', dashes_path
_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
答案 0 :(得分:2)
正如this question中所述,通常问题是当您在集合(复数)和成员(单数)控制器操作之间混淆时。
集合控制器操作是一个没有ID的操作,因为它不操作现有资源(dash
),或者因为它适用于一组资源。 RESTful集合操作包括:index
,new
和create
。他们每个人都有一个辅助方法和一个"动词" (方法):
index
:url: dashes_path, method: :get
(方法get是默认值)create
:url: dashes_path, method: :post
new
:url: new_dash_path, method: :get
请注意index
和create
如何共享相同的复数网址帮助方法dashes_path
。只有method
选项区分它们。
成员控制器操作是一个操作,它具有正在操作的资源的ID(一个特定dash
)。 RESTful集合操作是:
edit
:url: edit_dash_path(@dash), method: :get
show
:url: dash_path(@dash), method: :get
update
:url: dash_path(@dash), method: :patch
destroy
:url: dash_path(@dash), method: :destroy
查看除edit
以外的所有其他操作,使用相同的单数网址帮助方法dash_path(@dash)
。
您可以在in the guides找到更多详细信息。
现在,"点而不是斜线"症状是指您错误地尝试以应该用于集合操作的方式指向成员操作。所以,如果你尝试dashes_path(@dash)
- 那就没有了。 dashes_path
接受的唯一参数是format
,它会在点后添加到最后的网址中,这就是为什么您会看到{{1}这样奇怪的网址的原因}。
Rails表单构建器/dash.6
,form_for
等扩展需要决定是否将表单操作指向simple_form_for
集合操作(呈现#create
集合操作时)或#new
成员操作(呈现#update
成员操作时)。他们这样做了#34;神奇地"通过查看您执行#edit
时给出的对象。如果simple_form_for(@dash)
为真,则他们会将表单操作指向@dash.new_object?
,如果结果为假,则会将其指向#create
。
在你使用它的情况下"开箱即用"一切都很好。当您将此行添加到#update
:
routes.rb
默认情况下,get 'dash', to: 'dashes#show'
是成员操作,而不是集合操作。它必须收到一个ID。我认为这就是为什么Simple Form会对你起作用的原因。而不是那个别名,试试这个:
show
如果这样可以解决问题,请告诉我们。
总的来说,我建议"使用" RESTful路由然后"反对"他们。很少需要在get 'dash/:id', to: 'dashes#show'
中添加命名路由。也有例外情况,但我认为在您的情况下偏离惯例并尝试使用routes.rb
而不是dash/1
是合理的。 "使用" Rails将为您提供众所周知的生产力提升,而不是"反对"通过尝试强制它来获得像这样的相对较小的细节。