首页 > 解决方案 > 我如何创建具有不同类名的关注方法(取决于控制器)

问题描述

我有 2 个控制器。两者非常相似,不同之处仅在于模型类名称。

例如:

生产控制器.rb

  def new_task_order_counter(board_id)
    tasks = Production.where(board_id: board_id)
    task_order = tasks.count + 1
  end

development_controller.rb

  def new_task_order_counter(board_id)
    tasks = Development.where(board_id: board_id)
    task_order = tasks.count + 1
  end

我想提出一个问题,即在我的控制器中将有一种方法替换这两种方法。有没有办法得到它?

标签: ruby-on-rails

解决方案


关注是要走的路

创建一个app/controllers/concerns

module TasksConcern
  extend ActiveSupport::Concern

  included do
    def new_task_order_counter(scope, board_id)
      tasks = scope.where(board_id: board_id)
      task_order = tasks.count + 1

      # you could simplify to:
      # scope.where(board_id: board_id).count + 1 
    end
  end
end

要在控制器中使用它,请添加以下行:

include TasksConcern

并使用这样的方法:

order = new_task_order_counter(Development, board_id)

推荐阅读