我正在使用 ruby on rails 构建一个示例电子商务应用程序。我的 Controller 名称之一是“products_controller”。这个 Controller 也作为嵌套 Controller 放在里面。这些 Controller 内的操作是相同的。我们如何表示这些 Action 无需重复代码。 代码示例如下。
app/controllers/products_controller.rb
def index
@product = Product.all
@vari = @products.variants
.............
.............
end
app/controllers/master_admins/products_controller.rb
def index
@product = Product.all
@vari = @products.variants
.............
.............
end
应用程序/ Controller /master_admins/properties_controller.rb
def product
@product = Product.all
@vari = @products.variants
.............
.............
end
上述操作包含相同的一组代码。我们如何重构它以使代码不重复。
提前致谢....
最佳答案
我建议使用 concerns这对 DRY 来说很棒。
对于controller,常用的方法可以放这里:
在我的 app/controllers/concerns/common.rb
module Common
extend ActiveSupport::Concern
module ClassMethods
## This is a Class method, call it just like you call any other class method
def get_products_and_variants
@product = Self.all
@vari = @product.variants
end
end
## Instance method, if you don't want aclass method, use this instance method
def my_instance_method
## code for method
end
然后,通过在 Controller 中包含common.rb来调用它*
include Common
def index
## This will make @product and @vari available
Product.get_products_and_variants
# ............
end
## Other method using same method call
def product
## This will make @product and @vari available
Product.get_products_and_variants
# .............
end
如果你有多个类使用这个类方法,你可以使用这样的东西(在 common.rb
中):
def get_details
if self == Product
## Get products
elsif self == Variant
## Get variants
elsif self == ProductDetail
## Get product details
end
end
关于ruby-on-rails - 我们如何避免 Controller 中方法的重复/重复 - RAILS 3+,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29371205/