active_record_extensions.rb

来自「ruby on rails web敏捷开发之路第二版 源代码」· RB 代码 · 共 45 行

RB
45
字号
#---# Excerpted from "Agile Web Development with Rails, 2nd Ed."# We make no guarantees that this code is fit for any purpose. # Visit http://www.pragmaticprogrammer.com/titles/rails2 for more book information.#---module Relevance  module ActiveRecordExtensions    def user_columns      self.content_columns.find_all do |d|        !d.name.match /(_at|_on|position|lock_version|_id|password_hash)$/      end    end    def find_by_like(value, *columns)      self.find(:all, :conditions=>conditions_by_like(value, *columns))    end    def find_by_criteria(template)      self.find(:all, :conditions=>conditions_by_criteria(template))          end        def conditions_by_like(value, *columns)      columns = self.user_columns if columns.size==0      columns = columns[0] if columns[0].kind_of?(Array)      conditions = columns.map {|c|        c = c.name if c.kind_of? ActiveRecord::ConnectionAdapters::Column        "`#{c}` LIKE " + ActiveRecord::Base.connection.quote("%#{value}%")      }.join(" OR ")    end        def conditions_by_criteria(template)      attrs = template.class.columns.map &:name      vals = []      attrs.each {|a| vals << "`#{a}` LIKE " + ActiveRecord::Base.connection.quote("%#{template.send(a)}%") if !template.send(a).blank? && a != 'id' && a != 'lock_version' }      vals.join(" AND ")    end    def has_manies()      self.reflect_on_all_associations.select {|x| x.macro == :has_many || x.macro == :has_and_belongs_to_many}    end    def has_ones()      self.reflect_on_all_associations.select {|x| x.macro == :has_one || x.macro == :belongs_to}    end  endendActiveRecord::Base.extend Relevance::ActiveRecordExtensions

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?