如何在Rails中共享嵌套路由的控制器操作?

时间:2013-02-12 09:28:48

标签: ruby-on-rails

在Rails中,当我需要时:

/comments

/posts/1/comments

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

3 个答案:

答案 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)

我认为您只希望/commentsshow行动index,对吧?否则,在创建或更新post时,comment参数将会丢失。

routes.rb中,你可以拥有类似的内容:

resources : posts do
  resources :comments
end
resources :comments, :only => [:index, :show]

以您的形式:

form_for([@post, @comment]) do |f| 

在您的控制器中,确保在处理post之前找到commentsneweditcreate和{{1}例如:

update

答案 2 :(得分:0)

你可以使用rails路径做任何你想做的事。

<强>的routes.rb

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

resources :posts do

   member do
    get "comments"
   end
 end