在rails 4中适当地外包模型代码的位置?

时间:2016-06-01 10:36:12

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

在我的模型中,我使用bing翻译器gem通过after_create回调自动翻译模型属性:

class Place < ActiveRecord::Base

  after_create :auto_translate

  ....

  # AUTO_TRANSLATE STUFF
  def initialize_bing_translator(bing_id, bing_secret)
    t = BingTranslator.new(bing_id, bing_secret)
    <do other stuff>
  end

  def auto_translate
    <do stuff>
  end

  <further auto_translate methods>

一大堆函数似乎让模型代码膨胀了一点,所以我想把它放到一些额外的模块中。 哪里我应该放置.rb文件?这是一个关注的用例(一个我没有完全理解的概念)?在模型文件中定义单独的模块或将其放在/lib/user_modules/中是否更好?有像经验法则吗?网上提供的信息让我感到困惑,如果有人能为我解释这个问题,我会感到高兴!

2 个答案:

答案 0 :(得分:1)

我开始在models的子文件夹中添加这样的内容并相应地命名空间。在您的具体情况下,我会将其放在类似models/place/translator.rb(或类似)的内容中,并致电课程Place::Translator

如果您只想要一种逻辑分离但不会在其他地方使用相同的功能,则可以使用concerning而不是单独的关注。

答案 1 :(得分:1)

有很多选择,其中大多数主要是基于意见的。这取决于您是否计划重用该类,您的应用程序已经复杂多少以及新类是否具有任何外部依赖性。

我会考虑:创建自己的gem,添加到app/models,添加一个新的app/translators目录,可能在lib ...