`
52jobs
  • 浏览: 11761 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

理解rails gems plugins

 
阅读更多
#33 Making a Plugin
引用
注意 这种手法,可能对 rails 4 不再起作用
rails4 http://guides.rubyonrails.org/plugins.html

关于废弃插件的说明 https://github.com/rails/rails/commit/dad7fdc5734a3813246f238ac5760b2076932216
rails 3及以下
After loading the framework and any gems and plugins in your application, Rails turns to loading initializers. An initializer is any Ruby file stored under +config/initializers+ in your application. You can use initializers to hold configuration settings that should be made after all of the frameworks, plugins and gems are loaded, such as options to configure settings for these parts.
rails4
After loading the framework and any gems in your application, Rails turns to loading initializers. An initializer is any Ruby file stored under +config/initializers+ in your application. You can use initializers to hold configuration settings that should be made after all of the frameworks and gems are loaded, such as options to configure settings for these parts.

rails4 不再有 vendor/plugins
Rails 4 将删除 Rails::Plugins 类,所以将不会再加载 vender/plugins 目录下的任何代码。
大多数应用应该依赖于 gems 而不是插件。但如果你在 vender/plugins 中还有一些代码,你有两种选择:
改用 gem 方式实现,多数插件已经有了 gem 版本,如果没有你可以在 Gemfile 中通过 :gitor:pathoptions 来引用插件
移到 lib/your\_pluginand ,然后在 conconfig/initializers 初始化


简介:将get/set等做成一个plugin 减少重复
 You can sometimes remove a lot of duplication by generating methods dynamic.
 In this episode I will show you how to create a plugin which does exactly that.
 
  目的: 
 class Task < ActiveRecord::Base
    belongs_to :project
     def due_at_string
       due_at.to_s(:db)
     end
  
     def due_at_string=(due_at_str)
       self.due_at = Time.parse(due_at_str)
     rescue ArgumentError
       @due_at_invalid = true
     end
end
 将以上代码简化成
 class Task < ActiveRecord::Base   
   stringify_time :due_at     
 end
 
 
 手法:
 1、script/generate plugin stringify_time

 2、init.rb
 require 'stringify_time'
 
 class ActiveRecord::Base
   extend StringifyTime
 end
 
 3、stringify_time.rb
  module StringifyTime
    def stringify_time(*names)
      names.each do |name|
      
        define_method "#{name}_string" do
          read_attribute(name).to_s(:db)
        end
      
        define_method "#{name}_string=" do |time_str|
          begin
            write_attribute(name, Time.parse(time_str))
          rescue ArgumentError
            instance_variable_set("@#{name}_invalid", true)
          end
        end      
        define_method "#{name}_is_invalid?" do
          return instance_variable_get("@#{name}_invalid")
        end      
      end
    end
  end

 4、 最终,我们的task model可以这样写
  class Task < ActiveRecord::Base
    belongs_to :project
    stringify_time :due_at  
    def validate
      errors.add(:due_at, "is invalid") if @due_at_invalid
    end  
  end
分享到:
评论

相关推荐

    rails-4.2.0-gems

    Rails 4.2.0 是一个非常重要的版本,在Ruby on Rails框架的历史中占据了显著位置。这个版本引入了许多新特性、改进和性能优化,为开发者...通过学习和理解这些知识点,开发者可以更高效地利用Rails进行Web应用开发。

    rails_plugins_presentation.pdf

    安装过程会将插件放置在Rails应用根目录下的`vendor/plugins`子文件夹内。 移除插件同样简单,只需删除`vendor/plugins`目录下的对应文件夹,或者使用`./script/plugin remove tabnav`命令,再配合SVN的`svn ...

    Rails Plugins:Extending Rails Beyond the Core

    Rails Plugins:Extending Rails Beyond the Core

    rails need gems

    rails need gems

    gems使用手册ruby on rails

    gems使用手册ruby on rails,真的很好很好很好用啊

    Ruby on Rails Tutorial Learn Rails by Example 的源代码

    这本书通过实际的示例项目“sample_app”引导读者深入理解Rails框架的各个方面。现在,我们来详细探讨这个源代码包中的知识点。 1. **Ruby on Rails框架基础**:Rails是一个基于Ruby语言的开源Web应用框架,遵循MVC...

    好用的rails 2.0 Api 文档

    Rails 2.0 API 文档是一个非常宝贵的资源,它为开发者提供了全面的指南,以便于在使用Ruby on Rails 2.0版本时更好地理解和利用其框架功能。Ruby on Rails(简称Rails)是一个开源的Web应用框架,它遵循MVC(模型-...

    rails2-sample

    Rails Plugins(Rails插件) Rails插件是扩展框架功能的有效方式。本章节将介绍如何安装、使用和开发自己的Rails插件。插件可以提供新的特性或增强现有功能,帮助开发者更快地完成项目。 #### 11. Debugging, ...

    ruby gems (rails ,padrino, cancan ,puppet)

    在提到的标题和描述中,我们聚焦于四个特定的Ruby Gems:Rails、Padrino、Cancan和Puppet。这些Gem分别在Web开发、轻量级框架、权限控制以及配置管理方面起着重要作用。 Rails是Ruby on Rails的简称,它是一个基于...

    Rails 101 入门电子书

    ### Rails 101 入门电子书知识点详解 #### 一、简介 《Rails 101 入门电子书》是一本非常适合初学者直接入门的书籍,它由xdite编写并出版于2014年6月10日。本书主要针对的是希望学习Ruby on Rails框架的读者,特别...

    举例理解Ruby on Rails的页面缓存机制

    在标题和描述中提到的“举例理解Ruby on Rails的页面缓存机制”,主要是指通过具体的例子来阐述如何在实际项目中运用页面缓存。例如,IBM 官方技术文档中的内容可能包含以下示例: 1. **启用页面缓存**:在 Rails ...

    RAILS2.1的中文版资料

    综上所述,《RAILS2.1的中文版资料》为Ruby on Rails开发者提供了丰富的资源和深入的技术细节,不仅有助于开发者更好地理解2.1版本的新特性,还能帮助他们利用这些特性构建更高效、更稳定的Web应用程序。

    Rails recipes

    Rails Recipes是Rails社区中的重要资源,适合那些希望提高开发技能并深入理解Rails框架的开发者。特别是在Rails社区快速发展,各种新技术和概念层出不穷的背景下,这本书为开发者提供了一个宝贵的参考,帮助他们保持...

    Rails101_by_rails4.0

    为了确保读者能够通过实践加深理解,书中还安排了一系列练习作业,从最基础的“Hello World”开始,逐步过渡到更复杂的概念,如Rails的Routing(路由)机制。路由机制是Web应用中一个非常核心的概念,它定义了不同的...

    Rails项目源代码

    这个Rails项目提供了学习和研究Web开发的机会,特别是对于Ruby on Rails新手,可以通过阅读和理解源代码来提升技能,了解实际应用中Rails的用法。同时,对于有经验的开发者,这个项目也可以作为一个起点,进行二次...

    ruby on rails社区网站开发源码

    13. **社区插件(Gems)**:Rails的生态系统中有大量高质量的第三方Gem,如Devise(用户认证)、Pundit(授权管理)、Paperclip或Carrierwave(文件上传)等,它们可以极大地扩展Rails的功能。 通过研究这个源码,...

    ruby on rails api

    描述中的“方便查阅”意味着这个CHM文件可能是一个组织良好的Rails API参考手册,便于开发者快速查找和理解Rails的各种API用法。 在Rails中,一些关键的API知识点包括: 1. **ActiveRecord**:这是Rails的核心组件...

    Rails

    综合以上信息,学习和掌握Rails需要理解其核心组件和设计理念,熟练使用相关工具,阅读源码以加深对框架运作的理解,并通过实践项目来巩固理论知识。Rails是一个强大且高效的Web开发框架,它简化了许多常见的开发...

Global site tag (gtag.js) - Google Analytics