0

編集:これらの多くを見てきましたが、これに対する答えが見つからなかったので、できる限り文書化してこの質問をしようとしています.

ネストされたコメント リソースを持つ (API を呼び出す) モデルのない Rails アプリがあります。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

コメント#indexページから以下のコードを呼び出すと、完全に機能します。ただし、別のコントローラーから別のフォームに投稿することは非常に一般的であり、opusses#show ページからこのコードを呼び出すと、上記のエラーで失敗します。

URLヘルパーに関係していた可能性があるため、コントローラーとアクションを明示的に指定しようとしましたが、それでも機能しませんでした.同じエラーが発生しました.

4

2 に答える 2

2

Classic newbie mistake, but for others benefit =>

I had rake routes and I had the path correct, what I wasn't doing was submitting a the id of the parent resource. So POST to the path and include the object in question. In my case this mean opuss_comments_path(@opuss["xyz"]) where xyz was the id of my object.

opuss_comments GET    /opusses/:opuss_id/comments(.:format)          comments#index
               POST   /opusses/:opuss_id/comments(.:format)          comments#create

Ah.. learning. :)

于 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 に答える