Ruby on rails Rails共享控制器操作

Ruby on rails Rails共享控制器操作,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我在构建控制器问题时遇到问题。我希望关注扩展可用的类操作 假设我有控制器“SamplesController” class SamplesController < ApplicationController include Searchable perform_search_on(Sample, handle: [ClothingType, Company, Collection, Color]) end 而且,尽管设置了一个路由,我还是得到了错误“无法为SamplesContr

我在构建控制器问题时遇到问题。我希望关注扩展可用的类操作

假设我有控制器“SamplesController”

class SamplesController < ApplicationController
  include Searchable
  perform_search_on(Sample, handle: [ClothingType, Company, Collection, Color])
end
而且,尽管设置了一个路由,我还是得到了错误
“无法为SamplesController找到操作”筛选器“

我想这可能与我是否包括或扩展模块有关。我尝试使用extend,但也出现了同样的错误

我仍然需要能够在每个控制器的基础上为模块提供一些配置选项。有没有可能实现我在这里的目标


感谢您的帮助

尝试从模块
ClassMethods
中删除这些方法。这使它们成为实例方法。

尝试从模块
ClassMethods
中删除这些方法。这就是使它们成为实例方法。

您应该将
操作
传递给块,并对
类方法
块执行
搜索

module Searchable
  extend ActiveSupport::Concern

  class_methods do
    def perform_search_on(klass, associations = {})
       .............
    end
  end      

  included do
    def filter
      respond_to do |format|
        format.json { render 'api/search/filters.json' }
      end
    end

  end
end

当您的
可搜索
模块
包含
方法
时,对
执行搜索和过滤操作

您应该将
操作
传递到块,并对
类方法
块执行
搜索

module Searchable
  extend ActiveSupport::Concern

  class_methods do
    def perform_search_on(klass, associations = {})
       .............
    end
  end      

  included do
    def filter
      respond_to do |format|
        format.json { render 'api/search/filters.json' }
      end
    end

  end
end


当您的
可搜索
模块
包含
方法
时,对
执行搜索和过滤操作

您必须在extend ActiveSupport::Concern
def self.included(base)base.extend(ClassMethods)end之后编写此文件
这对您不起作用吗?@PardeepDhingra否,请你发布一个完整的答案,以便我能确定你在做什么?请检查我是否发布了完整的答案你必须在extend ActiveSupport::Concern
def self.included(base)base.extend(ClassMethods)end
之后编写此内容。这对你不起作用吗?@PardeepDhingra否,请你发布一个完整的答案,这样我可以确定你在做什么?请检查我已经发布了完整的答案answer@cortext但我需要包括模块的每个控制器的配置选项…@cortext但我需要包括模块的每个控制器的配置选项…我缺少什么?SamplesController的未定义方法“执行搜索”:Class@rico_mac将
perform\u search\u on
传递给
class\u方法do…end
就像更新的答案一样。谢谢,这样就行了-但是,在我接受之前,您能告诉我在
perform\u search\u on
中创建的变量在包含的do块中不可用吗?它是不同的范围<代码>在类级别上对定义的类方法执行搜索,但在对象级别上是实例方法。检查它是否非常好,并用所有关于
关注点的示例进行了描述。ook,这是有意义的,有没有办法使这些变量在对象级别上可用于实例方法?我缺少什么?SamplesController的未定义方法“执行搜索”:Class@rico_mac将
perform\u search\u on
传递给
class\u方法do…end
就像更新的答案一样。谢谢,这样就行了-但是,在我接受之前,您能告诉我在
perform\u search\u on
中创建的变量在包含的do块中不可用吗?它是不同的范围<代码>在类级别上对定义的类方法执行搜索,但在对象级别上是实例方法。检查它是否很好地用示例描述了所有关于
关注点的问题
.ook,这是有意义的,是否有方法使这些变量可用于对象级别的实例方法?