在Rails中,当我需要时:
/comments
和
/posts/1/comments
如何最好地组织CommentsController?例如。让路由共享索引操作,还是使用2个控制器?
答案 0 :(得分:4)
您只能使用一个控制器。
我会使用before_filter
检查post_id
参数是否存在:
class CommentsController < ApplicationController
before_filter :find_post, only: [:index]
def index
if @post.present?
## Some stuff
else
## Other stuff
end
end
private
def find_post
@post = Post.find(params[:post_id]) unless params[:post_id].nil?
end
end
并且在你的路线中(有你选择的限制):
resources :posts do
resources :comments
end
resources :comments
答案 1 :(得分:1)
我认为您只希望/comments
和show
行动index
,对吧?否则,在创建或更新post
时,comment
参数将会丢失。
在routes.rb
中,你可以拥有类似的内容:
resources : posts do
resources :comments
end
resources :comments, :only => [:index, :show]
以您的形式:
form_for([@post, @comment]) do |f|
在您的控制器中,确保在处理post
之前找到comments
(new
,edit
,create
和{{1}例如:
update
答案 2 :(得分:0)
你可以使用rails路径做任何你想做的事。
<强>的routes.rb 强>
match 'posts/:id/comments', :controller => 'posts', :action => 'comments'}
resources :posts do
member do
get "comments"
end
end