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

pos*_*eid 0 ruby-on-rails

在 Rails 中,当我需要时:

/comments
Run Code Online (Sandbox Code Playgroud)

/posts/1/comments
Run Code Online (Sandbox Code Playgroud)

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

sie*_*ied 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
Run Code Online (Sandbox Code Playgroud)

并在您的路线中(根据您选择的限制):

resources :posts do
  resources :comments
end
resources :comments
Run Code Online (Sandbox Code Playgroud)