Rails 4 Controller关注初始化程序

时间:2015-04-03 12:15:54

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

我想向各种控制器添加状态问题,因为所有这些控制器共享相同的状态功能。

状态可以是“活动”,“非活动”或“已存档”。如果添加到特定的控制器ex。 bars_controller这些方法看起来像这样:

def activate
  @bar.activate!
  redirect_to(:back)
end

def deactivate
  @bar.deactivate!
  redirect_to(:back)
end

def archive
  @bar.archive!
  redirect_to(:back)
end

我已将上述内容移至我关注的Foo,我将Foo包含在我的控制器中,如下所示:

include Foo

将这些方法转移到关注点时,我遇到的问题是未定义Model实例。

如何概括我关注的代码的“@bar”部分?这将使我能够使用包括Baz在内的多个Model实例的关注点。我尝试使用“self”但引用了Controller实例而不是Model实例。

1 个答案:

答案 0 :(得分:0)

您的担忧可能如下所示:

module Foo
    extend ActiveSupport::Concern

    def activate
        render text: bar.to_json
    end

    def deactivate
        render text: bar.to_json
    end

    def archive
        render text: bar.to_json
    end

    private

    def bar
        # 'demodulize' isn't necessary if you're working outside of namespaces
        params[:controller].classify.demodulize.constantize.find(params[:id])
    end

end

您的路线也会受益于使用问题:

concern :statusable do
    member do
        get :activate
        get :deactivate
        get :archive
    end
end

resources :alphas, :bravos, :charlies, concerns: :statusable