我无法构建控制器问题。我想关注扩展类可用的操作。
鉴于我有控制器'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,但也出现了同样的错误。
我仍然需要能够在每个控制器的基础上为模块提供一些配置选项。是否有可能实现我在这里要做的事情?
感谢任何帮助,谢谢
答案 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_on
和filter
操作时。
答案 1 :(得分:1)
尝试从模块ClassMethods
中删除方法。这就是使它们成为实例方法。