日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

诗歌rails之如何写一个简单的Rails Plugin

發布時間:2023/11/27 生活经验 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 诗歌rails之如何写一个简单的Rails Plugin 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
生成plugin骨架代碼:
Ruby代碼
  1. ruby?script\generate?plugin?MyPlugin??
ruby script\generate plugin MyPlugin
功能需求:
在BlogController中把所有符合條件的Post(Model)生成為xml
如果不使用插件,很easy :
in BlogController
Ruby代碼
  1. def?export_to_xml??
  2. ??posts?=?Post.find(:all,?:order?=>?'published_date',??
  3. ??????:conditions?=>?['title?=??',?'love'])??
  4. ??send_data?posts.to_xml,?:type?=>?'text/xml;?charset=UTF-8;',??
  5. ??????:disposition?=>?"attachment;?filename=posts.xml"??
  6. 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代碼
  1. class?BlogController?<?ApplicationController??
  2. ??my_plugin?:post??
  3. ????
  4. ??def?to_xml??
  5. ????export_to_xml??
  6. ??end??
  7. end??
class BlogController < ApplicationControllermy_plugin :postdef to_xmlexport_to_xmlend
end

OK,立刻滿足以上的要求,進入你的project:
生成plugin Ruby代碼
  1. ruby?script\generate?plugin?MyPlugin??
ruby script\generate plugin MyPlugin
and than to find:
vendor/plugins/my_plugin/lib/my_plugin.rb
接著就是edit了:
Ruby代碼
  1. module?MyPlugin??
  2. ????
  3. ??def?self.included(base)??
  4. ????base.extend(ClassMethods)??
  5. ??end??
  6. ??
  7. ??class?Config??
  8. ????attr_reader?:model??
  9. ????attr_reader?:model_id??
  10. ??????
  11. ????def?initialize(model_id)??
  12. ??????@model_id?=?model_id??
  13. ??????@model?=?model_id.to_s.camelize.constantize??
  14. ????end??
  15. ??????
  16. ????def?model_name??
  17. ??????@model_id.to_s??
  18. ????end??
  19. ??end??
  20. ????
  21. ??module?ClassMethods??
  22. ??????
  23. ????def?my_plugin(model_id?=?nil)??
  24. ??????model_id?=?self.to_s.split('::').last.sub(/Controller$/,?'').pluralize.singularize.underscore?unless?model_id??
  25. ??????@my_plugin_config?=?MyPlugin::Config.new(model_id)??
  26. ??????include?MyPlugin::InstanceMethods??
  27. ????end??
  28. ??????
  29. ????def?my_plugin_config??
  30. ??????@my_plugin_config?||?self.superclass.instance_variable_get('@my_plugin_config')??
  31. ????end??
  32. ??????
  33. ??end??
  34. ??
  35. ??module?InstanceMethods??
  36. ??????
  37. ????def?export_to_xml??
  38. ??????data?=?self.class.my_plugin_config.model.find(:all,?:order?=>?'published_date',?:conditions?=>?conditions_for_collection)??
  39. ??????send_data?data.to_xml,?:type?=>?'text/xml;?charset=UTF-8;',??
  40. ????????:disposition?=>?"attachment;?filename=#{self.class.my_plugin_config.model_name.pluralize}.xml"??
  41. ????end??
  42. ??????
  43. ????#?在controller中覆蓋此method,寫入滿足的條件??
  44. ????def?conditions_for_collection??
  45. ????end??
  46. ??????
  47. ??end??
  48. ??
  49. 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代碼
  1. ActionController::Base.class_eval?do??
  2. ??include?MyPlugin??
  3. end??
ActionController::Base.class_eval doinclude MyPlugin
end

或edit這樣:
Ruby代碼
  1. require?'my_plugin'??
  2. 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。