0

编辑:我看过其中的一些,但找不到答案,所以我试图尽我所能记录下来并提出这个问题。

我有一个带有嵌套评论资源的无模型 Rails 应用程序(调用 API)。如果我直接转到comments#new 或comments#index 操作并相应地发布到comments#create 操作,我可以针对故事发表评论。

但是,我非常希望能够在与父资源的#show 操作相同的页面上发表评论:(opusses#show)

我尝试使用来自 rake 路由的 rails url_helper 路径作为 opuss_comments_path 并明确说明控制器和操作。在这两种情况下,我仍然收到此消息:

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

&&

        like_opuss GET    /opusses/:id/like(.:format)                    opusses#like
  authorfeed_opuss GET    /opusses/:id/authorfeed(.:format)              opusses#authorfeed
      repost_opuss POST   /opusses/:id/repost(.:format)                  opusses#repost
           opusses GET    /opusses(.:format)                             opusses#index
                   POST   /opusses(.:format)                             opusses#create
         new_opuss GET    /opusses/new(.:format)                         opusses#new
        edit_opuss GET    /opusses/:id/edit(.:format)                    opusses#edit
             opuss GET    /opusses/:id(.:format)                         opusses#show
                   PUT    /opusses/:id(.:format)                         opusses#update
                   DELETE /opusses/:id(.:format)                         opusses#destroy

当我从 comments#index 页面调用下面的代码时,它工作得很好。但是,从不同的控制器发布到另一个表单是很常见的,当我从 opuses#show 页面调用此代码时,它会因上述错误而失败。

如果它与 URL 帮助程序有关,我尝试明确指定控制器和操作,但仍然不起作用 - 产生了相同的错误。

4

2 回答 2

2

经典的新手错误,但对其他人有利=>

我有 rake 路线并且路径正确,我没有做的是提交父资源的 id。所以 POST 到路径并包含有问题的对象。在我的情况下,这意味着 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

啊。。学习了。:)

于 2013-01-30T09:26:30.690 回答
1

根据您的路线,您不必使用 url 助手。但您必须确保您在控制器中拥有 Opuss 对象的句柄。所以做这样的事情;

@opuss = Opuss.find(params[:id]) #or your equivalent finder code
@comment = @opuss.comments.build

然后在你看来;

<%= form_for([@opuss, @comment]) do |f| %>
  .... rest of form
<% end %> 
于 2013-01-29T23:03:43.577 回答