Lan*_*ard 10 rubygems module initialization ruby-on-rails ruby-on-rails-3
class_eval如果我想从Rails 3应用程序扩展Gem中埋藏的类,那么扩展类行为,通过和模块(而不是通过继承)的推荐方法是什么?
一个例子是:
我想添加为标签和类别创建永久链接的功能(通过ActsAsTaggableOn和ActsAsCategory宝石).
他们已定义Tag和Category模型.
我想基本上这样做:
Category.class_eval do
has_friendly_id :title
end
Tag.class_eval do
has_friendly_id :title
end
Run Code Online (Sandbox Code Playgroud)
即使有其他方法可以添加可能特定于gem的此功能,在这样的Rails 3应用程序中向类添加行为的推荐方法是什么?
我有一些我想创建的其他宝石,比如Configuration模型和Asset模型.我希望能够在app/models/configuration.rb我的应用程序中添加创建模型类,它就像我刚才那样class_eval.
无论如何,这应该是怎么回事?我找不到任何有关当前Rails 3博客/文档/要点的内容.
我按如下方式执行此操作,首先将文件添加到config/initializers,您可以在其中要求包含扩展名的文件:
# config/initializers/extensions.rb
require "#{Rails.root}/app/models/category.rb"
require "#{Rails.root}/app/models/tag.rb"
Run Code Online (Sandbox Code Playgroud)
然后你可以重新打开这些类并添加你需要的任何东西:
# app/models/category.rb
class Category
has_friendly_id :title
end
Run Code Online (Sandbox Code Playgroud)
唯一的缺点是必须重新启动服务器才能使这些文件的任何更改生效,不确定是否有更好的方法可以解决这个问题.