带有类型参数的泛型方法与创建独立方法

时间:2017-11-23 16:52:44

标签: ruby-on-rails ruby ruby-on-rails-4 design-patterns

我的情况是

  1. 用户创建页面。
  2. 用户发送评论页面。
  3. 我们有多种类型的评论,例如全球,区域和翻译评论。
  4. 我已经有了一个页面模型。

    因此,在页面模型中,我应该编写一个方法,例如get_reviewstype参数

    Vs的

    我应该定义3个单独的方法,例如get_global_reviewsget_regional_reviewsget_translation_reviews

    我对设计模式知之甚少。我只想提出一些建议,这是最好的实施方式。

2 个答案:

答案 0 :(得分:1)

在不知道更多内容的情况下很难说,但从我所看到的情况来看,我很想在模型(http://api.rubyonrails.org/v5.1/classes/ActiveRecord/Enum.html)上使用enum来定义范围为了你,保持快速和干净。

类似的东西:

enum review_type: [:global, :regional, :translation], _suffix: :reviews

然后您可以致电:

Review.global_reviews

Review.regional_reviews

Review.translation_reviews

你也可以使用类似的东西将它发送到params的模型/评论集合中。

page = Page.first
params = { type: :regional_reviews }
page.reviews.send(params[:type])

我还没有测试过它创造的确切范围,但它会像上面那样。你不需要使用后缀,但我认为它会让事情变得更清晰。

如果你计划使用type,我们会小心谨慎 - 它是由ActiveRecord保留的,所以请确保你没有命名数据库列。

答案 1 :(得分:0)

我会更倾向于为所有评论创建一个方法,前提是所有类型的获取评论的实现都是相同的。

如果获取不同类型的评论的实现不同。我将创建单独的方法,因为我希望尽可能简化方法。