Ruby on rails 没有与{:controller=>;comments";,:action=>;create";}匹配的路由-它匹配
编辑:我已经看到了很多这样的问题,但找不到答案,所以我正试图尽可能地将其记录下来,并提出这个问题 我有一个无模型rails应用程序(调用API),带有嵌套的注释资源。如果我直接进入评论#新建或评论#索引操作并相应地发布到评论#创建操作,我可以发布针对某个故事的评论 不过,我非常希望能够在“显示父资源的操作:(Opuses#show)”的同一页面上发表评论 我尝试使用rake路由中的rails url\u helper路径作为opuss\u comments\u路径,并明确说明控制器和操作。在这两种情况下,我仍然得到以下信息:Ruby on rails 没有与{:controller=>;comments";,:action=>;create";}匹配的路由-它匹配,ruby-on-rails,Ruby On Rails,编辑:我已经看到了很多这样的问题,但找不到答案,所以我正试图尽可能地将其记录下来,并提出这个问题 我有一个无模型rails应用程序(调用API),带有嵌套的注释资源。如果我直接进入评论#新建或评论#索引操作并相应地发布到评论#创建操作,我可以发布针对某个故事的评论 不过,我非常希望能够在“显示父资源的操作:(Opuses#show)”的同一页面上发表评论 我尝试使用rake路由中的rails url\u helper路径作为opuss\u comments\u路径,并明确说明控制器和操作。在这两
No route matches {:controller=>"comments", :action=>"create"}
这是我的建议:
resources :users
resources :sessions, only: [:new, :create, :destroy]
resources :osessions, only: [:new, :create, :destroy]
resources :authors do
member do
get :following
get :followed
post :follow
end
end
resources :opusses do
resources :comments
member do
get :like
get :authorfeed
post :repost
end
end
我的耙子路线:
DELETE /authors/:id(.:format) authors#destroy
opuss_comments GET /opusses/:opuss_id/comments(.:format) comments#index
POST /opusses/:opuss_id/comments(.:format) comments#create
new_opuss_comment GET /opusses/:opuss_id/comments/new(.:format) comments#new
edit_opuss_comment GET /opusses/:opuss_id/comments/:id/edit(.:format) comments#edit
opuss_comment GET /opusses/:opuss_id/comments/:id(.:format) comments#show
PUT /opusses/:opuss_id/comments/:id(.:format) comments#update
DELETE /opusses/:opuss_id/comments/:id(.:format) comments#destroy
&&
当我从注释索引页面调用下面的代码时,它工作得非常好。然而,从不同的控制器发布到另一个表单是很常见的,当我从Opuss#show页面调用此代码时,它会失败,出现上述错误
可能与URL帮助器有关,我尝试显式指定控制器和操作,但仍然不起作用-生成了相同的错误。根据您的路由,您不应该使用URL帮助器。但是您必须确保在控制器中有opus对象的句柄。这样做吧
@opuss = Opuss.find(params[:id]) #or your equivalent finder code
@comment = @opuss.comments.build
然后在你看来,
<%= form_for([@opuss, @comment]) do |f| %>
.... rest of form
<% end %>
.... 其余部分
根据您的路线,您不必使用url帮助器。但是您必须确保在控制器中有opus对象的句柄。这样做吧
@opuss = Opuss.find(params[:id]) #or your equivalent finder code
@comment = @opuss.comments.build
然后在你看来,
<%= form_for([@opuss, @comment]) do |f| %>
.... rest of form
<% end %>
.... 其余部分
新手犯的经典错误,但对其他人有利=>
我有rake路由,路径正确,我没有做的是提交一个父资源的id。因此,发布到路径并包含有问题的对象。在我的例子中,这意味着opuss_comments_path(@opuss[“xyz”]),其中xyz是我的对象的id
opuss_comments GET /opusses/:opuss_id/comments(.:format) comments#index
POST /opusses/:opuss_id/comments(.:format) comments#create
啊。。学习:) 典型的新手错误,但对其他人有利=> 我有rake路由,路径正确,我没有做的是提交一个父资源的id。因此,发布到路径并包含有问题的对象。在我的例子中,这意味着opuss_comments_path(@opuss[“xyz”]),其中xyz是我的对象的id
opuss_comments GET /opusses/:opuss_id/comments(.:format) comments#index
POST /opusses/:opuss_id/comments(.:format) comments#create
啊。。学习:) 您正在链接到某个非嵌套的“注释”资源;URL帮助程序将期望传入包含的Opu。显示有问题的代码会很有帮助;URL帮助程序将期望传入包含的Opu。这将有助于显示有问题的代码。谢谢。我的困境是我没有模型,所以Opuss控制器只是调用我创建的APIWrapper。因此,在opuss#show action中,我进行了两次api调用,并返回了两个对象,@opuss和@comments,这两个对象都可以在show.html.erb视图中找到。所以我的表单不处理模型对象。(我想我本可以使用form_标记),但问题仍然是我需要向create操作提交一个表单注释,该操作最终将调用另一个api方法(在comments控制器的create操作中)。尝试过[:opus,:comments]也没有骰子。以另一种方式提问:如果另一个控制器是父控制器的逻辑嵌套资源,如何将位于一个控制器视图上的表单数据发布到另一个控制器的#create操作?我只想将数据发布到API。谢谢。我的困境是我没有模型,所以Opuss控制器只是调用我创建的APIWrapper。因此,在opuss#show action中,我进行了两次api调用,并返回了两个对象,@opuss和@comments,这两个对象都可以在show.html.erb视图中找到。所以我的表单不处理模型对象。(我想我本可以使用form_标记),但问题仍然是我需要向create操作提交一个表单注释,该操作最终将调用另一个api方法(在comments控制器的create操作中)。尝试过[:opus,:comments]也没有骰子。以另一种方式提问:如果另一个控制器是父控制器的逻辑嵌套资源,如何将位于一个控制器视图上的表单数据发布到另一个控制器的#create操作?我只想将数据发布到API。