Module: ActiveRecord::Querying
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Extended In:
| |
Defined in: | activerecord/lib/active_record/querying.rb |
Instance Attribute Summary
- #average readonly
- #calculate readonly
- #count readonly
- #create_with readonly
- #delete readonly
- #delete_all readonly
- #destroy readonly
- #destroy_all readonly
- #distinct readonly
- #eager_load readonly
- #except readonly
- #fifth readonly
- #find readonly
- #find_by readonly
- #find_each readonly
- #find_in_batches readonly
- #find_or_create_by readonly
- #find_or_initialize_by readonly
- #first readonly
- #first_or_create readonly
- #first_or_initialize readonly
- #forty_two readonly
- #fourth readonly
- #from readonly
- #group readonly
- #having readonly
- #ids readonly
- #includes readonly
- #joins readonly
- #last readonly
- #limit readonly
- #lock readonly
- #maximum readonly
- #minimum readonly
- #none readonly
- #offset readonly
- #order readonly
- #pluck readonly
- #preload readonly
- #readonly readonly
- #references readonly
- #reorder readonly
- #rewhere readonly
- #second readonly
- #select readonly
- #sum readonly
- #take readonly
- #third readonly
- #uniq readonly
- #unscope readonly
- #update readonly
- #update_all readonly
- #where readonly
Instance Method Summary
- #any? ⇒ Boolean
-
#count_by_sql(sql)
Returns the result of an SQL statement that should only include a COUNT(*) in the SELECT part.
- #exists? ⇒ Boolean
- #fifth!
- #find_by!
-
#find_by_sql(sql, binds = [])
Executes a custom SQL query against your database and returns all the results.
- #find_or_create_by!
- #first!
- #first_or_create!
- #forty_two!
- #fourth!
- #last!
- #many? ⇒ Boolean
- #second!
- #take!
- #third!
Instance Attribute Details
#average (readonly)
[ GitHub ]#calculate (readonly)
[ GitHub ]#count (readonly)
[ GitHub ]#create_with (readonly)
[ GitHub ]#delete (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/querying.rb', line 8
delegate :destroy, :destroy_all, :delete, :delete_all, :update, :update_all, to: :all
#delete_all (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/querying.rb', line 8
delegate :destroy, :destroy_all, :delete, :delete_all, :update, :update_all, to: :all
#destroy (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/querying.rb', line 8
delegate :destroy, :destroy_all, :delete, :delete_all, :update, :update_all, to: :all
#destroy_all (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/querying.rb', line 8
delegate :destroy, :destroy_all, :delete, :delete_all, :update, :update_all, to: :all
#distinct (readonly)
[ GitHub ]#eager_load (readonly)
[ GitHub ]#except (readonly)
[ GitHub ]#fifth (readonly)
[ GitHub ]#find (readonly)
[ GitHub ]#find_by (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/querying.rb', line 7
delegate :find_by, :find_by!, to: :all
#find_each (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/querying.rb', line 9
delegate :find_each, :find_in_batches, to: :all
#find_in_batches (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/querying.rb', line 9
delegate :find_each, :find_in_batches, to: :all
#find_or_create_by (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/querying.rb', line 6
delegate :find_or_create_by, :find_or_create_by!, :find_or_initialize_by, to: :all
#find_or_initialize_by (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/querying.rb', line 6
delegate :find_or_create_by, :find_or_create_by!, :find_or_initialize_by, to: :all
#first (readonly)
[ GitHub ]#first_or_create (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/querying.rb', line 5
delegate :first_or_create, :first_or_create!, :first_or_initialize, to: :all
#first_or_initialize (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/querying.rb', line 5
delegate :first_or_create, :first_or_create!, :first_or_initialize, to: :all
#forty_two (readonly)
[ GitHub ]#fourth (readonly)
[ GitHub ]#from (readonly)
[ GitHub ]#group (readonly)
[ GitHub ]#having (readonly)
[ GitHub ]#ids (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/querying.rb', line 14
delegate :pluck, :ids, to: :all
#includes (readonly)
[ GitHub ]#joins (readonly)
[ GitHub ]#last (readonly)
[ GitHub ]#limit (readonly)
[ GitHub ]#lock (readonly)
[ GitHub ]#maximum (readonly)
[ GitHub ]#minimum (readonly)
[ GitHub ]#none (readonly)
[ GitHub ]#offset (readonly)
[ GitHub ]#order (readonly)
[ GitHub ]#pluck (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/querying.rb', line 14
delegate :pluck, :ids, to: :all
#preload (readonly)
[ GitHub ]#readonly (readonly)
[ GitHub ]#references (readonly)
[ GitHub ]#reorder (readonly)
[ GitHub ]#rewhere (readonly)
[ GitHub ]#second (readonly)
[ GitHub ]#select (readonly)
[ GitHub ]#sum (readonly)
[ GitHub ]#take (readonly)
[ GitHub ]#third (readonly)
[ GitHub ]#uniq (readonly)
[ GitHub ]#unscope (readonly)
[ GitHub ]#update (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/querying.rb', line 8
delegate :destroy, :destroy_all, :delete, :delete_all, :update, :update_all, to: :all
#update_all (readonly)
[ GitHub ]# File 'activerecord/lib/active_record/querying.rb', line 8
delegate :destroy, :destroy_all, :delete, :delete_all, :update, :update_all, to: :all
#where (readonly)
[ GitHub ]Instance Method Details
#any? ⇒ Boolean
#count_by_sql(sql)
Returns the result of an SQL statement that should only include a COUNT(*) in the SELECT part. The use of this method should be restricted to complicated SQL queries that can't be executed using the Calculations class methods. Look into those before using this.
Parameters
-
sql
- An SQL statement which should return a count query from the database, see the example below.Product.count_by_sql “SELECT COUNT(*) FROM sales s, customers c WHERE s.customer_id = c.id”
# File 'activerecord/lib/active_record/querying.rb', line 63
def count_by_sql(sql) sql = sanitize_conditions(sql) connection.select_value(sql, "#{name} Count").to_i end
#exists? ⇒ Boolean
#fifth!
[ GitHub ]#find_by!
[ GitHub ]# File 'activerecord/lib/active_record/querying.rb', line 7
delegate :find_by, :find_by!, to: :all
#find_by_sql(sql, binds = [])
Executes a custom SQL query against your database and returns all the results. The results will be returned as an array with columns requested encapsulated as attributes of the model you call this method from. If you call Product.find_by_sql
then the results will be returned in a Product
object with the attributes you specified in the SQL query.
If you call a complicated SQL query which spans multiple tables the columns specified by the SELECT will be attributes of the model, whether or not they are columns of the corresponding table.
The sql
parameter is a full SQL query as a string. It will be called as is, there will be no database agnostic conversions performed. This should be a last resort because using, for example, MySQL specific terms will lock you to using that particular database engine or require you to change your call if you switch engines.
# A simple SQL query spanning multiple tables
Post.find_by_sql "SELECT p.title, c.author FROM posts p, comments c WHERE p.id = c.post_id"
# => [#<Post:0x36bff9c @attributes={"title"=>"Ruby Meetup", "first_name"=>"Quentin"}>, ...]
You can use the same string replacement techniques as you can with QueryMethods#where:
Post.find_by_sql ["SELECT title FROM posts WHERE author = ? AND created > ?", , start_date]
Post.find_by_sql ["SELECT body FROM comments WHERE author = :user_id OR approved_by = :user_id", { :user_id => user_id }]
# File 'activerecord/lib/active_record/querying.rb', line 38
def find_by_sql(sql, binds = []) result_set = connection.select_all(sanitize_sql(sql), "#{name} Load", binds) column_types = result_set.column_types.dup columns_hash.each_key { |k| column_types.delete k } = ActiveSupport::Notifications.instrumenter payload = { record_count: result_set.length, class_name: name } .instrument('instantiation.active_record', payload) do result_set.map { |record| instantiate(record, column_types) } end end
#find_or_create_by!
[ GitHub ]# File 'activerecord/lib/active_record/querying.rb', line 6
delegate :find_or_create_by, :find_or_create_by!, :find_or_initialize_by, to: :all
#first!
[ GitHub ]#first_or_create!
[ GitHub ]# File 'activerecord/lib/active_record/querying.rb', line 5
delegate :first_or_create, :first_or_create!, :first_or_initialize, to: :all