Ruby on rails 没有与{:controller=>;comments";,:action=>;create";}匹配的路由-它匹配

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路径,并明确说明控制器和操作。在这两

编辑:我已经看到了很多这样的问题,但找不到答案,所以我正试图尽可能地将其记录下来,并提出这个问题

我有一个无模型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。