Forum: Ruby n00b: code logic (probably a 1-min-question)

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
460ead051b49c0b2a8e45e46252d4bda?d=identicon&s=25 Tom Ha (tom)
on 2009-05-07 18:31
Hi there,

Why do I get 'true' when:
- I call: @agency.all_agents_done? and
- @gency has at least 3 Agents


The Agency model is:
====================

  class Agency < ActiveRecord::Base
    has_many :agents

    def all_agents_done?     # (don't look for any real sense in this
method...)
      i=0
      self.agents do |agent| # (@gency has at least 3 Agents...)
        i=i+1 if (1 == 1)
      end

      if i == 0
        true
      else
        false
      end
    end
  end



Thanks for any hint!
Tom
D7463bd611f227cfb2ef4da4a978a203?d=identicon&s=25 Christopher Dicely (Guest)
on 2009-05-07 20:50
(Received via mailing list)
On Thu, May 7, 2009 at 9:31 AM, Tom Ha <tom999@gmx.net> wrote:
>  class Agency < ActiveRecord::Base
>        true
> --
> Posted via http://www.ruby-forum.com/.


In the question at the tops and the comment, you alternate between
@agency and @gency -- if this inconsistency exists in the method that
has the instance variable(s) @agency and/or @gency that is calling
this code, that could be part of the source of the problem.
460ead051b49c0b2a8e45e46252d4bda?d=identicon&s=25 Tom Ha (tom)
on 2009-05-07 21:45
Sorry, that's just a typo in my question, so the problem is still there
and lies elsewhere, but I just don't get it - everything seems to be
correct...

Am I stupid?
410ff5abeb4b1c686fe49d70dbba1c8f?d=identicon&s=25 Gabriel Saravia (theperuvian)
on 2009-05-07 21:50
Christopher Dicely wrote:
> On Thu, May 7, 2009 at 9:31 AM, Tom Ha <tom999@gmx.net> wrote:
>>  class Agency < ActiveRecord::Base
>>        true
>> --
>> Posted via http://www.ruby-forum.com/.
>
>
> In the question at the tops and the comment, you alternate between
> @agency and @gency -- if this inconsistency exists in the method that
> has the instance variable(s) @agency and/or @gency that is calling
> this code, that could be part of the source of the problem.

i'm sorry, i know the comment says not too, but I have to look for sense
in the method, and if i do, it appears that you are essentially asking
if there are any agents at all?? if that is the case, why are you simply
not writing:

def all_agents_done?
  self.agents.size == 0
end

and why do you have this, "if (1 == 1)" condition? this is like asking
"if true"
460ead051b49c0b2a8e45e46252d4bda?d=identicon&s=25 Tom Ha (tom)
on 2009-05-07 22:06
Thanks for replying - well, there's not much "sense" in the example
because I took stuff out, to make it shorter.

Basically, the problem in the original example above is apparently, that
@agency.agents has a 'length'/'size' of 4, but the counter i does NOT
get incremented in the loop "self.agents do |agent| ... " ('i' stays
0...).

But why? What am I missing? I just don't get it...
460ead051b49c0b2a8e45e46252d4bda?d=identicon&s=25 Tom Ha (tom)
on 2009-05-07 22:18
Holy sh... I got it:

"self.agents do |agent| ..." was missing the ".each":

-> "self.agents.each do |agent| ..."

Guess I can answer that "am I stupid" question now... :-(
990bf71a4e84e1145a3131f35656dc18?d=identicon&s=25 List Rb (listx300108u79872)
on 2009-05-07 23:56
(Received via mailing list)
Ouch :-)
This topic is locked and can not be replied to.