ruby-on-rails – 使用Rails应用程序中的模块的模型

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 使用Rails应用程序中的模块的模型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个需要从辅助源加载外部数据的模型.存在许多Web服务,我的模型可以从(可交换)获取数据,但是我不想创建将难以更改服务的代码(成本根据可变和固定使用而显着不同,并且可能会更改将被要求).

我想创建一个驱动程序来执行交互(然后再创建进一步的定制驱动程序,如果服务需要切换).不幸的是,由于驱动程序和模型的紧密耦合,将代码提取插件或宝石中是没有意义的.我已将所有的代码提取到一个模块中(参见示例),目前我的模型已经声明了.

module Synchronize
  def refresh
    self.attributes = ...
    self.save
  end
end

class Data < ActiveRecord::Base
  include Synchronize
end

Rails(3.0.0)是否存储与模型紧密耦合的模块?我应该使用插件来做这个吗?这与“app / helpers”目录有关吗?如果没有,最适合存储代码的地方在哪里?谢谢!

解决方法

你是正确的,如果模块紧密耦合到特定的模型,那么它不是宝石/插件的好候选人.

app / helpers /用于查看辅助方法,不应包含仅用于混合到模型中的模块.

你可以把这个模块的一个地方放在lib /里.这是代码,它不适合应用程序内的任何地方,通常是移动到插件之前松散耦合代码的初始位置(但这不是一个艰难和快速的规则).但是,由于您的模块与您的模型紧密耦合,因此lib /可能不是最佳选择.

我知道37信号(和其他人)使用“关注”的概念作为在模块中组织的相关模型代码的一种方式.这是通过创建应用程序/关注/将模块放在那里来实现的.然后将该目录添加到config / application.rb(Rails 2的config / environment.rb)中的应用程序的加载路径中:

config.load_paths += %W(#{Rails.root}/app/concerns)

然后,模块可以正常混合到模型中.

这是Jamis Buck – http://weblog.jamisbuck.org/2007/1/17/concerns-in-activerecord的原始博文

我个人喜欢的另一个变体,尽管它不涉及模块,但是使用这个插件
http://github.com/jakehow/concerned_with

希望有帮助.

猜你在找的Ruby相关文章