我會考慮返工其中您嵌套的Comment
RESTful路線,你不是。我假設你的模型看起來是這樣的:
# app/models/image.rb
class Image < ActiveRecord::Base
has_many :comments
end
# app/models/comment.rb
class Comment < ActiveRecord::Base
belongs_to :image
end
因爲你Image
和Comment
車型擁有一個一對多的關係,我能明白你爲什麼會覺得嵌套圖像中的註釋資源路線一。然而,在comments_controller.rb
所有CRUD操作中,僅create
實際需要,父母圖像ID中被明確地傳遞。從REST風格的角度來看,只有new
和create
操作需要一個image_id
傳遞給動作。 edit
,update
,delete
和like
操作都可以獨立於父映像進行。
考慮備選路由原理來代替:
# 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。您的路線不再重複,並且每個操作都會爲其聲明一條路線。
感謝您的詳細回覆/解釋! – 0xSina
當然。希望這一切都有道理。基本上,確保每個操作只有一條路由,可以讓應用程序保持乾爽,並避免需要添加一堆條件來處理從多個來源路由到的操作中的參數。 – zeantsoi
這是一種遲到,但......通常有索引/新/創建評論資源的路徑不包括圖像的ID,而是將其包含在參數?所以不要說圖片/ 1 /評論,做評論/ 1?image_id = 5。哪一個更安寧?謝謝! – 0xSina