ruby-on-rails - 是在 mixin 模块中声明 Active Record Associations 的有效方法吗?

标签 ruby-on-rails ruby ruby-on-rails-3 activerecord mixins

我正在使用 Ruby on Rails v3.2.2,我想知道它是否是声明 Active Record Association有效方法。在混合模块中。 为什么?

更多:

  1. 这种方法的优点和缺点是什么?
  2. 有什么需要注意的地方吗?
  3. 有处方吗?

注意:我想 DRY(不要重复自己)我的代码,因为与我的 Active Record 关联相关的语句对于多个模型是相同的。

最佳答案

继续做吧!关于您的问题:

  • 关于 1:最大的优势是您拥有干净的代码库,没有重复的代码;我能想到的最大缺点是,对于查看您的代码的人来说,它可能不会立即显而易见。

  • 关于 3:您必须在 included 回调中或使用新的 ActiveSupport::Concern 扩展来定义关联。

例子:

# using the standard include callback
module LocationAwareness

  def self.included(base)
    base.has_one :location
  end
end

# using ActiveSupport::Concern
module LocationAwareness
  extend ActiveSupport::Concern

  included do
    base.has_one :location
  end
end

然后你可以像这样在你的模型中使用它:

class Person < ActiveRecord::Base
  include LocationAwareness
end

class Gig < ActiveRecord::Base
  include LocationAwareness
end

#...

如果您有更多的共享行为而不仅仅是“只是”关联,那么这种方法当然开始变得更有意义......

关于ruby-on-rails - 是在 mixin 模块中声明 Active Record Associations 的有效方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12709492/

相关文章:

ruby-on-rails - 在 Rails 中重构 View 逻辑

ruby-on-rails - 无法登录到 Active Admin。有什么方法可以创建管理员用户?

javascript - 在 rails 中,如何 g-zip 由 'javascript_include_tag' 生成的组合 javascript 文件?

ruby - Ruby 中正则表达式后的字母

arrays - 如何在 rails 中对哈希进行排序

linux - Rails 3 的 bash_completion

jquery - 如何使用jRecorder和Ruby on Rails将录制的音频文件上传到Amazon S3

ruby-on-rails - 在我的 rails 3 应用程序中,simple_captcha 在生产模式下不显示图像

ruby-on-rails - 在 ruby​​ 中构造字符串

ruby-on-rails-3 - heroku rails logging 不显示输出?