0

在 Rails 中,当我需要时:

/comments

/posts/1/comments

如何最好地组织 CommentsController?例如让路由共享索引操作,或者使用 2 个控制器?

4

3 回答 3

5

您只能使用一个控制器。

我会去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
于 2013-02-12T09:41:16.927 回答
1

我相信你想要/comments的只是为了showindex行动,对吧?否则,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, createand update, 例如:

@post = Post.find(params[:post_id])
@comment = @post...
于 2013-02-12T09:35:12.370 回答
0

您几乎可以使用 Rails 路线做任何您想做的事情。

路线.rb

match 'posts/:id/comments', :controller => 'posts', :action => 'comments'}

resources :posts do

   member do
    get "comments"
   end
 end
于 2013-02-12T09:43:14.720 回答