ruby-on-rails-3 – rails3 gem:acts_as_something
我正在尝试将一些常见代码提取到gem中.
我认为acts_as_something是一个简单重用的好策略. 是否有一个很好的教程,讨论rails3宝石的这个?我发现有几个讨论rails2(例如http://guides.rubyonrails.org/plugins.html),但这是rails2特有的 这里有一些我已经读过的教程/博客: > http://guides.rubyonrails.org/plugins.html 谢谢 解决方法
更新:我根据这个答案添加了一篇博文,但更详细:
http://thoughtsincomputation.com/posts/coding-an-acts_as-gem-for-rails-3
– 我不知道另外一个教程来源,但这里有一些一般的提示. Rails 3使用了一个名为Railtie的非常有用的功能 – 见http://api.rubyonrails.org/classes/Rails/Railtie.html. 所以,如果我实现了acts_as_ * gem,我就会从那里开始.我的铁路可能看起来像: # lib/acts_as_awesome/railtie.rb require 'rails' require 'acts_as_awesome' module ActsAsAwesome class Railtie < Rails::Railtie config.to_prepare do ApplicationController.send(:extend,ActsAsAwesome::Hook) end end end 和ActsAsAwesome :: Hook代码: # lib/acts_as_awesome/hook.rb module ActsAsAwesome::Hook def acts_as_awesome(*args) options = args.extract_options! # do the things that make the controller awesome. include ActsAsAwesome::InstanceMethods before_filter :an_awesome_filter end end 我觉得这里的概念是合理的,之前使用过类似的过程.基本上,它会告诉Rails在生产期间和开发中的每个请求之前执行一次to_prepare块(我们希望这样,因为ApplicationController将在那些时候重新加载,可能会消除我们的钩子方法);钩子就是这样:它为所有控制器(或者更确切地说,扩展ApplicationController的所有控制器)添加了一个钩子,允许用户将真正的“Awesome”代码引入其控制器,而不会影响不需要它的控制器. #acts_as_awesome钩子本身并不传达Awesome功能.那是因为并非所有控制器都需要此功能.相反,该方法负责通过ActsAsAwesome :: InstanceMethods模块引入真正令人敬畏的东西.这样,用户只有在显式调用acts_as_awesome方法时才会获得Awesome功能.它还向控制器添加了一个before过滤器,以演示此方法中的代码与目标控制器类本身中的代码完全相同. 如果你的目标是模型而不是控制器,这种技术应该完全相同:只需将钩子注入ActiveRecord :: Base即可.由于AR:B仅在Rails启动时加载,您应该可以将其放入初始化程序(请参阅Railtie文档),但我保留在此处被误解的权利. 关于铁路的问题:文档读起来好像它应该被自动检测,但我经常遇到这个问题.要解决它,只需要从gem的主要源文件中获取railtie(在上面的示例中,这将是lib / acts_as_awesome.rb). 您可以在我的github帐户中查看整个ActsAsAwesome源代码: 我希望这是有帮助的.你的问题有点高级,所以我能做的最好的答案就是高级别. -Colin MacKenzie IV http://thoughtsincomputation.com @sinisterchipmnk (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |