使用重用的控制器方法重构Rails 4 before_action以获得代码速度

时间:2015-05-19 19:14:13

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

我一直在学习Rails一段时间了,我想知道在其他方法中包含可重用方法的最佳方法是什么。我使用before_action作为一些,但我想知道我是否应该转换我的代码,看起来像'Fig.A'在行动之前使用更多(图B)。这是最好的做法吗?它会提高速度吗?

图A
SomeController.rb

def some_action
  #logic
end

def my_method
 some_action
  #logic
end

def my_other_method
 some_action
  #logic
 end

与使用之前的行动相比

图B
SomeController.rb

before_action  :some_action, only: [:my_method, :my_other_method]

def some_action
  #logic
end

def my_method
  #logic
end

def my_other_method
  #logic
end

我正在问我正在尝试处理最佳做法和清理代码。哪种方式首选?

1 个答案:

答案 0 :(得分:2)

你在这里问了两个不同的问题。抽象方法以便它们可以恢复的好方法是以子类继承行为的模块或超类的形式。想想继承ActiveRecord :: Base的rails模型以及它如何继承数据库访问方法等。

您可能会说您在application_controller中定义了之前的操作方法,这很好,但限制它们在某些控制器中使用并不一定能提高性能。如果它们很重并且您只希望它们在某些控制器上实例化,那么模块将是更好的方法,但它们必须足够大且复杂才能在不包含它们的控制器中获得性能。