我在建立控制器问题时遇到问题我希望关注扩展类可用的操作。
假设我有控制器“样本控制器”

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

我包括“可搜索”模块
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,但也出现了同样的错误。
我仍然需要能够在每个控制器的基础上为模块提供一些配置选项。有没有可能实现我在这里的目标?
谢谢你的帮助

最佳答案

您应该将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操作时。

关于ruby-on-rails - Rails共享 Controller Action ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30979981/

10-13 04:47