2

サポートしたい:

POST images/1/comments/2/like

POST comments/2/like

どちらも同じアクションで同じリソースを指しています。Railsルートファイルでそれを行うにはどうすればよいですか?

  resources :images do
    resources :comments do
      member do
        post 'like'
      end
    end
  end

これは

POST images/1/comments/2/like

しかし、部品を指定しない場合はどうすればよいimages/1ですか?

4

4 に答える 4

2

実際にはもっと美しくすることができます。http://ruby-journal.com/how-to-dry-your-rails-routes/によると、これも機能します。

comments = Proc.new do
  member do
    post 'like'
  end
end

resources :comments, &comments

resources :images do
  comments.call
end

Rails 4では懸念を使用できます

concern :comments_concern do
  member do
    post 'like'
  end
end

resources :comments, concerns: :comments_concern

resources :images, concerns: :comments_concern do
  #do more stuff here
end

私はこれをテストしませんでしたが、役立つかもしれません。言及されたウェブサイトを見てください。幸運を

-frbl

于 2015-03-29T10:08:23.793 に答える
1

ネストしているRESTfulルートとネストしていないRESTfulルートを作り直すことを検討しCommentます。あなたのモデルは次のようになっていると思います:

# app/models/image.rb
class Image < ActiveRecord::Base
    has_many :comments
end

# app/models/comment.rb
class Comment < ActiveRecord::Base
    belongs_to :image
end

あなたのモデルImageCommentモデルは 1 対多の関係を持っているため、コメント リソース ルートをイメージ 1 内にネストする理由がわかりました。ただし、 のすべての CRUD アクションのうちcomments_controller.rb実際に 親イメージ ID を明示的に渡す必要があるのは だけです。、、、およびアクションはすべて、親イメージとは独立して実行できます。createnewcreateimage_ideditupdatedeletelike

代わりに、別のルーティング スケマティックを検討してください。

# config/routes.rb
resources :images do
  resources :comments, :only => [:index, :new, :create]
end

resources :comments, :only => [:show, :edit, :update, :destroy] do
  member do
    post 'like'
  end
end

これで、親 ID に明示的に依存するコメント アクションのみが、実際にはイメージ ルート内にネストされます。残りのコメント アクションは、親 ID を渡さずに直接コメント コントローラーにルーティングされます。ルートが重複することはなくなり、各アクションには 1 つのルートが宣言されます。

于 2013-06-13T08:37:30.377 に答える