ruby-on-rails - 在 Rails 中,如何将私有(private)方法共享给嵌套 Controller ?

标签 ruby-on-rails controller action nested-resources

我有一个 Player 资源,其中包含各种嵌套资源,例如:MeasurableWorkout

我有一个变量用于 Player 页面上的 header ,无论我是从 Player_Controller 还是从其他嵌套资源 Controller 之一访问操作,我都需要设置一个变量。我怎样才能干涸我的代码以在某处添加该变量,这样我就不必在每个 Controller 中包含相同的代码......如下所示:

播放器 Controller

class PlayersController < ApplicationController
   before_action :set_measurable_summary

   #...

   private
     def set_measurable_summary
       @measurable_summary = @player.measurable_summary
     end
end

锻炼 Controller

class Players::WorkoutsController < ApplicationController
   before_action :set_measurable_summary

   #...

   private
     def set_measurable_summary
       @measurable_summary = @player.measurable_summary
     end
end

最佳答案

这可以通过 concern 轻松完成。 :

# app/controllers/concerns/measurable_summary.rb

module MeasurableSummary
  extend ActiveSupport::Concern

  included do
    before_action :set_measurable_summary
  end

  private

  def set_measurable_summary
    @measurable_summary = @player.measurable_summary
  end
end

然后将其包含到您的 Controller 中:

class PlayersController < ApplicationController
  include MeasurableSummary
  ...
end

class Players::WorkoutsController < ApplicationController
  include MeasurableSummary
  ...
end

关于ruby-on-rails - 在 Rails 中,如何将私有(private)方法共享给嵌套 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33710836/

相关文章:

jquery - 如何在 jquery_ujs 响应中的 Javascript ERB 模板中调用 Coffeescript 模板?

javascript - 在 Rails 中实现 "endless page"的最佳方式?

ruby-on-rails - 无法通过 Facebook 进行身份验证

ruby-on-rails - "TypeError: can' t 添加记录关系时将Symbol转换成String

java - SpringBoot 通过 @Autowired HttpServletRequest 转发请求导致 StackOverFlow 异常

php - Laravel 没有创建没有错误的记录

ios - 从另一个 Controller 加载 View Controller

django - Django检查查询集模型类型的最佳方法

单击 Facebook 发布按钮时出现 java.lang.IllegalMonitorStateException

javascript - 无法在 redux 操作中重命名响应