我应该在哪里存储常用功能?

时间:2012-12-29 18:53:26

标签: ruby-on-rails ruby-on-rails-3 controller

我有三个型号。

  • users_controllers.rb
  • communities_controller.rb
  • community_tipics_controller.rb

我正在使用名为 check_digit

的功能
def checkdigit
 (transaction)
end

我将它放在所有控制器中并通过before_filter调用它 但我认为我在浪费,因为我只是将上面完全相同的代码粘贴到所有控制器上。

如果我的控制器共同使用它,我应该把它放在哪里? 我应该把它放在controllers / application_controller.rb吗?

3 个答案:

答案 0 :(得分:2)

有几种方法可以做到这一点,一些可能的方法是(如果我这样做)

第一种方法

如果这是控制器使用的简单方法 在application_controller.rb中

private
def checkdigit
 (transaction)
end

第二种方法

如果您的功能由特定类别使用(通常我经常这样做),请创建一个单独的控制器并让您继承所有其他控制器

例如:如果您的方法仅使用我的管理员,并假设您有更多类似的方法

class AdminController < ApplicationController
   layout 'admin'

   private
   def checkdigit
     (transaction)
   end

end

and

class UsersController < AdminController

end

第三种方法

如果您的方法是/将由模型/控制器等使用..考虑将其作为模块

module CommonMethods
   def checkdigit
     (transaction)
   end
end

class UsersController < ApplicationController
    include CommonMethods 
end

HTH

答案 1 :(得分:1)

您可以将其放在helpers/application_helper.rb

答案 2 :(得分:1)

您是对的,所有控制器所需的所有常用方法都应存储在ApplicationController

此外,您还应该在此控制器中的所有控制器之间保持通用逻辑。

修改
如果他们只是帮助者,那么你会把它们放在帮助者去的地方,看看@simone的回答。