Rails共享控制器操作

时间:2015-06-22 12:26:06

标签: ruby-on-rails ruby ruby-on-rails-4

我无法构建控制器问题。我想关注扩展类可用的操作。

鉴于我有控制器'SamplesController'

class SamplesController < ApplicationController
  include Searchable
  perform_search_on(Sample, handle: [ClothingType, Company, Collection, Color])
end

我包含模块'Searchable'

module Searchable
  extend ActiveSupport::Concern

  module ClassMethods
    def perform_search_on(klass, associations = {})
       .............
    end

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

并且,尽管设置了路线我得到错误'The action 'filter' could not be found for SamplesController'

我认为可能与我包含或扩展模块有关。我尝试使用extend,但也出现了同样的错误。

我仍然需要能够在每个控制器的基础上为模块提供一些配置选项。是否有可能实现我在这里要做的事情?

感谢任何帮助,谢谢

2 个答案:

答案 0 :(得分:3)

您应该将actions传递到included区块,将perform_search_on传递给class_methods区块。

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

当您的Searchable模块include方法perform_search_onfilter操作时。

答案 1 :(得分:1)

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