我的情况是
我已经有了一个页面模型。
因此,在页面模型中,我应该编写一个方法,例如get_reviews
和type
参数
Vs的
我应该定义3个单独的方法,例如get_global_reviews
,get_regional_reviews
,get_translation_reviews
。
我对设计模式知之甚少。我只想提出一些建议,这是最好的实施方式。
答案 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)
我会更倾向于为所有评论创建一个方法,前提是所有类型的获取评论的实现都是相同的。
如果获取不同类型的评论的实现不同。我将创建单独的方法,因为我希望尽可能简化方法。