`
xu_wccq
  • 浏览: 130965 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

rails魔术字段的实现 ,alias_method_chain用法,for classmethod

    博客分类:
  • ruby
阅读更多

Encapsulates the common pattern of:

  alias_method :foo_without_feature, :foo
  alias_method :foo, :foo_with_feature

With this, you simply do:

  alias_method_chain :foo, :feature
替我们定义了两个方法:foo_with_feature 和 foo_without_feature <保存原来的foo方法>
def foo_with_feature
  在此添加想向foo方法里面写的代码
  foo_without_feature 调用一下原来的方法
end


And both aliases are set up for you.

Query and bang methods (foo?, foo!) keep the same punctuation:

  alias_method_chain :foo?, :feature

is equivalent to

  alias_method :foo_without_feature?, :foo?
  alias_method :foo?, :foo_with_feature?

so you can safely chain foo, foo?, and foo! with the same feature.
module ActiveRecord
  # Active Record automatically timestamps create and update operations if the table has fields
  # named created_at/created_on or updated_at/updated_on.
  #
  # Timestamping can be turned off by setting
  #   <tt>ActiveRecord::Base.record_timestamps = false</tt>
  #
  # Timestamps are in the local timezone by default but can use UTC by setting
  #   <tt>ActiveRecord::Base.default_timezone = :utc</tt>
  module Timestamp
    def self.included(base) #:nodoc:
      base.alias_method_chain :create, :timestamps
      base.alias_method_chain :update, :timestamps
值得注意的是 :create , :update 这两个方法均为实例方法,它和类方法 :create ,:update 重名,但最终类方法也要去掉实例的:create 和 :update方法。

   这里并不是把实例方法用别名定义为类方法。   再说也不可能把实例方法定义为类方法
。
base.class_inheritable_accessor :record_timestamps, :instance_writer => false
      base.record_timestamps = true
    end

    private
      def create_with_timestamps #:nodoc:
        if record_timestamps
          t = self.class.default_timezone == :utc ? Time.now.utc : Time.now
          write_attribute('created_at', t) if respond_to?(:created_at) && created_at.nil?
          write_attribute('created_on', t) if respond_to?(:created_on) && created_on.nil?

          write_attribute('updated_at', t) if respond_to?(:updated_at)
          write_attribute('updated_on', t) if respond_to?(:updated_on)
        end
        create_without_timestamps
      end

      def update_with_timestamps #:nodoc:
        if record_timestamps
          t = self.class.default_timezone == :utc ? Time.now.utc : Time.now
          write_attribute('updated_at', t) if respond_to?(:updated_at)
          write_attribute('updated_on', t) if respond_to?(:updated_on)
        end
        update_without_timestamps
      end
  end
end



alias_method_chain  用于类方法
重新定义 ActiveRecord::Base.find方法,加上特定的查询

module FooBar

  def self.included(base)
    base.extend ClassMethods
    base.class_eval do
      class << self
        alias_method_chain :find, :creator
      end
    end
  end

  module ClassMethods

    def find_with_creator(*args)
      if self.columns.include?('creator')
         with_scope(:find => {:conditions=> [sql_str, value_hash] }) do
              find_without_creator(*args)
            end
         end
    else
       find_without_creator(*args)
    end

  end

end

分享到:
评论

相关推荐

    RestFul_Rails_Dev_pdf_v_0.1.zip

    通过阅读这本书的翻译版,开发者不仅能学习到RESTful设计模式,还能掌握Rails框架下实现这些模式的具体方法和技术。无论是初学者还是经验丰富的Rails开发者,都能从中受益匪浅,提升自己的Web开发技能。

    Rails_3_Cheat_Sheets.pdf

    Rails_3_Cheat_Sheets.pdf

    rails_admin_content_builder:使用rails_admin创建内容的简单方法

    使用创建内容的简单方法。 预习 示范 要求 依存关系 MiniMagick 支持的ORM ActiveRecord 支持的资产插件 CarrierWave 安装 使用rails &lt;5和TurboLink &lt;5进行测试 将此行添加到您的应用程序的Gemfile中: ...

    rails_admin_acts_as_list:rails_admin插件以对记录进行排序

    介绍插件,用于对记录进行排序(使用 gem)安装要启用rails_admin_acts_as_list,请将以下内容添加到您的Gemfile : gem 'rails_admin_acts_as_list'gem 'rails_admin' 重要提示: rails_admin_acts_as_list之前必须...

    RestFul_Rails_Dev_v_0.1

    ### RestFul_Rails_Dev_v_0.1 关键知识点解析 #### 1. REST 概念与背景 REST(Representational State Transfer)是一种软件架构风格,最初由 Roy Fielding 在他的博士论文中提出。它主张使用 HTTP 协议的标准方法...

    Rails_Recipes_with_Source_Code

    书中可能讲解如何使用辅助方法(Helper Methods)、局部变量、布局(Layouts)和部分视图(Partials)来创建用户友好的界面。 4. **控制器(Controllers)**:控制器处理业务逻辑,连接模型和视图。书中会涉及动作...

    Agile Web Development with Rails 1-14节_ppt(老师发的修正版)

    Agile Web Development with Rails 1-14节_ppt(老师发的修正版)

    IkaGame示例。使用 Rails5 ActionCable_ruby_代码_下载

    通过研究这个示例,开发者可以掌握ActionCable的基本用法,了解如何在Rails5中实现WebSocket通信,以及如何将实时更新集成到现有的Rails应用程序中。此外,这个示例还展示了如何处理游戏状态的同步,这对于开发多人...

    rails_admin_image_manager:RailsAdmin和CKEditor的图像管理器

    $ rails generate rails_admin_image_manager:install 将上传文件路径添加到您的.gitignore文件中 /public/rails_admin_image_manager 运行迁移 $ rails db:migrate SCOPE=rails_admin_image_manager 安装图像管理...

    rails_model_test_hello_world

    自述文件版本和设置$ ruby -vruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-darwin18]$ rails -vRails 5.2.3使用我创建的特殊模板来加快开发过程。 # ~/rtfb_template.rbgroup :development , :test do gem '...

    用于过滤英文脏话的 Rails 插件 gem_Ruby_代码_相关文件_下载

    3. **使用**:在模型、控制器或视图中,你可以调用提供的方法来过滤文本。例如,在用户提交评论时,可以这样处理: ```ruby comment.content = ProfanityFilter.filter(comment.content) ``` 4. **自定义字典**:`...

    rails_admin_become_user:以设计用户身份登录的 Rails Admin 插件

    Rails 管理员成为用户 Rails Admin 插件成为主应用程序中的设计用户 概述 在对用户问题进行故障排除时,从用户的角度来看是非常有用的。 该插件向 Rails Admin 仪表板添加了一个自定义操作,以便以用户身份从您的...

    Complex Rails system_Rails_优化_

    在构建复杂的Rails应用时,性能优化是至关重要的。Rails,作为一个强大的Web开发框架,虽然提供了丰富的功能和便利性,但如果不进行适当的优化,可能会导致应用程序响应时间变慢,资源消耗过大,甚至影响用户体验。...

    Rails101_by_rails4.0

    Git作为版本控制系统,对于团队协作开发项目尤为重要,学习它的使用方法能够帮助开发者更好地管理代码的版本。而在Rails开发中,合适的编辑器可以提高代码编写和管理的效率,Linux命令行则对于部署和维护开发环境...

    awesome-rails-gem-zh_CN, Rails 常用 Gem 列表 - Awesome Rails Gem 中文版.zip

    Rails,全称Ruby on Rails,是一款基于Ruby语言的开源Web应用程序框架,以其“Don't Repeat Yourself”(DRY)和...在使用这些Gem时,记得阅读其文档,了解使用方法和注意事项,以便更好地融入到自己的项目中。

    Ruby-on-Rails-rails.zip

    Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zipRuby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zipRuby_on_...

    rails_admin_history_rollback:使用paper_trail的rails_admin的历史记录回滚

    安装要启用rails_admin_history_rollback ,请将以下内容添加到您的Gemfile确保将其添加到rails_admin之后: gem 'rails_admin'gem 'rails_admin_history_rollback' 不用说,此插件还需要paper_trail gem。...

    rails_admin_json_editor:RailsAdmin 的 JSON 编辑器

    写一个宝石描述安装将此行添加到应用程序的 Gemfile 中: gem 'rails_admin_json_editor'然后执行: $ bundle或者自己安装: $ gem install rails_admin_json_editor用法TODO:在这里写使用说明贡献分叉它( ...

    rails_admin_flatly_theme:RailsAdmin 的 Bootstrap 2 Flatly 主题

    用法 在您的Gemfile : gem 'rails_admin_flatly_theme' , github : 'konjoot/rails_admin_flatly_theme' 在config/application.rb ,就在Bundler.require之后: ENV [ 'RAILS_ADMIN_THEME' ] = 'flatly_theme'...

    plug_rails_cookie_session_store:与Rails兼容的插件会话存储

    标题中的"plug_rails_cookie_session_store"是一个针对Rails框架的会话存储插件,它旨在在Elixir的Phoenix框架中实现与Rails相兼容的会话管理。这个插件的目的是让那些从Rails迁移到Elixir Phoenix的应用程序能够...

Global site tag (gtag.js) - Google Analytics