preload
- 1.0.0
- 1.1.6
- 1.2.6
- 2.0.3
- 2.1.0
- 2.2.1
- 2.3.8
- 3.0.0
- 3.0.9
- 3.1.0 (0)
- 3.2.1 (0)
- 3.2.8 (0)
- 3.2.13 (0)
- 4.0.2 (0)
- 4.1.8 (0)
- 4.2.1 (0)
- 4.2.7 (0)
- 4.2.9 (0)
- 5.0.0.1 (38)
- 5.1.7 (0)
- 5.2.3 (0)
- 6.0.0 (0)
- 6.1.3.1 (0)
- 6.1.7.7 (0)
- 7.0.0
- 7.1.3.2
- 7.1.3.4
- What's this?
preload(records, associations, preload_scope = nil)
public
Eager loads the named associations for the given Active Record record(s).
In this description, ‘association name’ shall refer to the name passed to an association creation method. For example, a model that specifies belongs_to :author, has_many :buyers has association names :author and :buyers.
Parameters
records is an array of ActiveRecord::Base. This array needs not be flat, i.e. records itself may also contain arrays of records. In any case, preload_associations will preload all associations records by flattening records.
associations specifies one or more associations that you want to preload. It may be:
-
a Symbol or a String which specifies a single association name. For example, specifying :books allows this method to preload all books for an Author.
-
an Array which specifies multiple association names. This array is processed recursively. For example, specifying [:avatar, :books] allows this method to preload an author’s avatar as well as all of his books.
-
a Hash which specifies multiple association names, as well as association names for the to-be-preloaded association objects. For example, specifying { author: :avatar } will preload a book’s author, as well as that author’s avatar.
:associations has the same format as the :include option for ActiveRecord::Base.find. So associations could look like this:
:books [ :books, :author ] { author: :avatar } [ :books, { author: :avatar } ]
association our data
we can load our data whenever we want.
ActiveRecord::Associations::Preloader.new.preload(@users, :company)
Converting Hash to Struct in Ruby
With the fact we know about the two, many will perhaps prefer using struct rather than hash. But what we want to focus here is that behind the low performance given by hash, they still can become advantageous. If you can’t use it on its own little way, then convert it into struct so better usability can be achieved.
If you have already defined the struct and you wanted to initiate converting hash to struct, we can help you by using the following methods in a given example below. If you wanted to convert has to a struct in Ruby, let us say for example we have a given of:
h = { :a => 1, :b => 2 }
and want to have a struct such as:
s.a == 1 s.b == 2
To convert, you can do any of these methods: Conversion Method 1:
On this method, the result will appear to be OpenStruct and not specifically as struct:
pry(main)> require 'ostruct' pry(main)> s = OpenStruct.new(h) => #<OpenStruct a=1, b=2> pry(main)> puts s.a, s.b
Conversion Method 2:
If you have struct defined already and want to start something with a hash, you can follow this:
Person = Struct.new(:first_name, :last_name, :age) person_hash = { first_name: "Foo", last_name: "Bar", age: 29 } person = Person.new(*person_hash.values_at(*Person.members)) => #<struct Person first_name="Foo", last_name="Bar", age=29>
Conversion Method 3:
Since the hash key order was guaranteed in the Ruby 1.9+, you can follow this:
s = Struct.new(*(k = h.keys)).new(*h.values_at(*k))
The hash to struct conversion example we provided can help, but if you want a more extensive idea, come to professionals for formal assistance. Read More From Here http://www.railscarma.com/blog/technical-articles/guide-converting-hash-struct-ruby/