Method: ActiveRecord::QueryMethods#from

Defined in:
activerecord/lib/active_record/relation/query_methods.rb

#from(value, subquery_name = nil) ⇒ Object

Specifies the table from which the records will be fetched. For example:

Topic.select('title').from('posts')
# SELECT title FROM posts

Can accept other relation objects. For example:

Topic.select('title').from(Topic.approved)
# SELECT title FROM (SELECT * FROM topics WHERE approved = 't') subquery

Passing a second argument (string or symbol), creates the alias for the SQL from clause. Otherwise the alias “subquery” is used:

Topic.select('a.title').from(Topic.approved, :a)
# SELECT a.title FROM (SELECT * FROM topics WHERE approved = 't') a

It does not add multiple arguments to the SQL from clause. The last from chained is the one used:

Topic.select('title').from(Topic.approved).from(Topic.inactive)
# SELECT title FROM (SELECT topics.* FROM topics WHERE topics.active = 'f') subquery

For multiple arguments for the SQL from clause, you can pass a string with the exact elements in the SQL from list:

color = "red"
Color
  .from("colors c, JSONB_ARRAY_ELEMENTS(colored_things) AS colorvalues(colorvalue)")
  .where("colorvalue->>'color' = ?", color)
  .select("c.*").to_a
# SELECT c.*
# FROM colors c, JSONB_ARRAY_ELEMENTS(colored_things) AS colorvalues(colorvalue)
# WHERE (colorvalue->>'color' = 'red')


1391
1392
1393
# File 'activerecord/lib/active_record/relation/query_methods.rb', line 1391

def from(value, subquery_name = nil)
  spawn.from!(value, subquery_name)
end