If @account is nil it'll look in the database to find an account using
the account id from the session and return it; otherwise it'll just
return the current value of @account.
I'm looking at this method and don't understand what ||= means:
Much like 'x += 1' is a shortcut for 'x = x + 1', 'x ||= 1' is a
shortcut for 'x = x || 1'.
The significance of this is that the || method doesn't simply return a
boolean value; it checks the first argument, returns it if it evaluates
to 'true' (i.e. is something other than false or nil), and otherwise
returns the second argument. So it's commonly used as a shortcut for an
if/then statement, checking if the first argument is nil (or false). So
the following are all equivalent:
if @account @account
else
Account.find(session[:account_id])
end
Just to be explicit, it's both 'nil' or 'false' that will be reset to
the new value:
irb(main):001:0> f = false
=> false
irb(main):003:0> f ||= 1
=> 1
irb(main):004:0> f
=> 1 # was set
irb(main):002:0> n = nil
=> nil
irb(main):005:0> n ||= 1
=> 1
irb(main):006:0> n
=> 1 # was set
irb(main):007:0> t = true
=> true
irb(main):008:0> t ||= 1
=> true
irb(main):009:0> t
=> true # wasn't set
HTH,
Keith
···
On 1/12/07, Pedro Fortuny Ayuso <pfortuny@gmail.com> wrote:
It does the following in this order:
if @account HAS A VALUE (is not nil) then DO NOTHING
otherwise, compute Account.find(...) and set its return value into @account.
I'm looking at this method and don't understand what ||= means:
Much like 'x += 1' is a shortcut for 'x = x + 1', 'x ||= 1' is a
shortcut for 'x = x || 1'.
The significance of this is that the || method doesn't simply return a
boolean value; it checks the first argument, returns it if it evaluates
to 'true' (i.e. is something other than false or nil), and otherwise
returns the second argument. So it's commonly used as a shortcut for an
if/then statement, checking if the first argument is nil (or false). So
the following are all equivalent:
if @account @account
else
Account.find(session[:account_id])
end
Wow thanks, I thought I understood it before, but that example really spells
it out explicitly.
···
On 1/12/07, Keith Fahlgren <keith@audiobeta.com> wrote:
Just to be explicit, it's both 'nil' or 'false' that will be reset to
the new value:
irb(main):001:0> f = false
=> false
irb(main):003:0> f ||= 1
=> 1
irb(main):004:0> f
=> 1 # was set
irb(main):002:0> n = nil
=> nil
irb(main):005:0> n ||= 1
=> 1
irb(main):006:0> n
=> 1 # was set
irb(main):007:0> t = true
=> true
irb(main):008:0> t ||= 1
=> true
irb(main):009:0> t
=> true # wasn't set