在 Rails 中,当我需要时:
/comments
和
/posts/1/comments
如何最好地组织 CommentsController?例如让路由共享索引操作,或者使用 2 个控制器?
在 Rails 中,当我需要时:
/comments
和
/posts/1/comments
如何最好地组织 CommentsController?例如让路由共享索引操作,或者使用 2 个控制器?
您只能使用一个控制器。
我会去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
我相信你想要/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
(for new
, edit
, create
and update
, 例如:
@post = Post.find(params[:post_id])
@comment = @post...
您几乎可以使用 Rails 路线做任何您想做的事情。
路线.rb
match 'posts/:id/comments', :controller => 'posts', :action => 'comments'}
resources :posts do
member do
get "comments"
end
end