gpt4 book ai didi

ruby-on-rails - 我们如何避免 Controller 中方法的重复/重复 - RAILS 3+

转载 作者:太空宇宙 更新时间:2023-11-03 17:32:44 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com