诗歌rails之如何写一个简单的Rails Plugin
生活随笔
收集整理的這篇文章主要介紹了
诗歌rails之如何写一个简单的Rails Plugin
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
生成plugin骨架代碼:
Ruby代碼
在BlogController中把所有符合條件的Post(Model)生成為xml
如果不使用插件,很easy :
in BlogController
Ruby代碼
如果使用插件,我們要求能這樣:
Ruby代碼
OK,立刻滿足以上的要求,進入你的project:
生成plugin Ruby代碼
vendor/plugins/my_plugin/lib/my_plugin.rb
接著就是edit了:
Ruby代碼
OK了嗎? No No No 還要讓rails加載plugin,在rails應用啟動時,會到vendor/plugins目錄查找所有plugin,并執行其中的init.rb
那么就edit init.rb
Ruby代碼
或edit這樣:
Ruby代碼
最后就按上面的需求寫入controller了
Ruby代碼
- ruby?script\generate?plugin?MyPlugin??
ruby script\generate plugin MyPlugin 功能需求: 在BlogController中把所有符合條件的Post(Model)生成為xml
如果不使用插件,很easy :
in BlogController
Ruby代碼
- def?export_to_xml??
- ??posts?=?Post.find(:all,?:order?=>?'published_date',??
- ??????:conditions?=>?['title?=??',?'love'])??
- ??send_data?posts.to_xml,?:type?=>?'text/xml;?charset=UTF-8;',??
- ??????:disposition?=>?"attachment;?filename=posts.xml"??
- end??
def export_to_xmlposts = Post.find(:all, :order => 'published_date',:conditions => ['title = ?', 'love'])send_data posts.to_xml, :type => 'text/xml; charset=UTF-8;',:disposition => "attachment; filename=posts.xml"
end
如果使用插件,我們要求能這樣:
Ruby代碼
- class?BlogController?<?ApplicationController??
- ??my_plugin?:post??
- ????
- ??def?to_xml??
- ????export_to_xml??
- ??end??
- end??
class BlogController < ApplicationControllermy_plugin :postdef to_xmlexport_to_xmlend
end
OK,立刻滿足以上的要求,進入你的project:
生成plugin Ruby代碼
- ruby?script\generate?plugin?MyPlugin??
ruby script\generate plugin MyPlugin and than to find: vendor/plugins/my_plugin/lib/my_plugin.rb
接著就是edit了:
Ruby代碼
- module?MyPlugin??
- ????
- ??def?self.included(base)??
- ????base.extend(ClassMethods)??
- ??end??
- ??
- ??class?Config??
- ????attr_reader?:model??
- ????attr_reader?:model_id??
- ??????
- ????def?initialize(model_id)??
- ??????@model_id?=?model_id??
- ??????@model?=?model_id.to_s.camelize.constantize??
- ????end??
- ??????
- ????def?model_name??
- ??????@model_id.to_s??
- ????end??
- ??end??
- ????
- ??module?ClassMethods??
- ??????
- ????def?my_plugin(model_id?=?nil)??
- ??????model_id?=?self.to_s.split('::').last.sub(/Controller$/,?'').pluralize.singularize.underscore?unless?model_id??
- ??????@my_plugin_config?=?MyPlugin::Config.new(model_id)??
- ??????include?MyPlugin::InstanceMethods??
- ????end??
- ??????
- ????def?my_plugin_config??
- ??????@my_plugin_config?||?self.superclass.instance_variable_get('@my_plugin_config')??
- ????end??
- ??????
- ??end??
- ??
- ??module?InstanceMethods??
- ??????
- ????def?export_to_xml??
- ??????data?=?self.class.my_plugin_config.model.find(:all,?:order?=>?'published_date',?:conditions?=>?conditions_for_collection)??
- ??????send_data?data.to_xml,?:type?=>?'text/xml;?charset=UTF-8;',??
- ????????:disposition?=>?"attachment;?filename=#{self.class.my_plugin_config.model_name.pluralize}.xml"??
- ????end??
- ??????
- ????#?在controller中覆蓋此method,寫入滿足的條件??
- ????def?conditions_for_collection??
- ????end??
- ??????
- ??end??
- ??
- end??
module MyPlugindef self.included(base)base.extend(ClassMethods)endclass Configattr_reader :modelattr_reader :model_iddef initialize(model_id)@model_id = model_id@model = model_id.to_s.camelize.constantizeenddef model_name@model_id.to_sendendmodule ClassMethodsdef my_plugin(model_id = nil)model_id = self.to_s.split('::').last.sub(/Controller$/, '').pluralize.singularize.underscore unless model_id@my_plugin_config = MyPlugin::Config.new(model_id)include MyPlugin::InstanceMethodsenddef my_plugin_config@my_plugin_config || self.superclass.instance_variable_get('@my_plugin_config')endendmodule InstanceMethodsdef export_to_xmldata = self.class.my_plugin_config.model.find(:all, :order => 'published_date', :conditions => conditions_for_collection)send_data data.to_xml, :type => 'text/xml; charset=UTF-8;',:disposition => "attachment; filename=#{self.class.my_plugin_config.model_name.pluralize}.xml"end# 在controller中覆蓋此method,寫入滿足的條件def conditions_for_collectionendendend
OK了嗎? No No No 還要讓rails加載plugin,在rails應用啟動時,會到vendor/plugins目錄查找所有plugin,并執行其中的init.rb
那么就edit init.rb
Ruby代碼
- ActionController::Base.class_eval?do??
- ??include?MyPlugin??
- end??
ActionController::Base.class_eval doinclude MyPlugin
end
或edit這樣:
Ruby代碼
- require?'my_plugin'??
- ActionController::Base.send?:include,?MyPlugin??
require 'my_plugin'
ActionController::Base.send :include, MyPlugin
最后就按上面的需求寫入controller了
轉載于:https://www.cnblogs.com/orez88/articles/1550476.html
總結
以上是生活随笔為你收集整理的诗歌rails之如何写一个简单的Rails Plugin的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 明基家用投影仪ms3801如何操作?
- 下一篇: Jquery JQZoom Plugin