Forum: Ruby on Rails Why can't I 'count' the results from a model 'find'?

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.
Theo G. (Guest)
on 2008-11-26 00:40
Hi,

I'm running the following code in my show() method:

        @articles = Article.find(:all, :conditions => ["issue_id = ?",
@issue.id], :order => '`column`,position')

        if (params[:article_id])
          @article_id = params[:article_id].to_i
          c = 0
          total = @articles.count
          while (c < total)
            if @article_id == @articles[c].id
              if c == 0
                @article_prev = @articles.last.id
              else
                @article_prev = @articles[(c-1)].id
              end
              if ((c+1) == total)
                @article_next = @articles.first.id
              else
                @article_next = @articles[(c+1)].id
              end
            end
          end
        else
          @article_id = 0
          @article_main = @articles.first.id
          @article_prev = @articles.last.id
          @article_next = @articles[1].id
        end

Now to be honest this code is already a bit odd for me but I have no
idea how else to approach this in Ruby on Rails. So I've attempted to do
it PHP-style. But I'm being told that I can't do @articles.count

Why? I have a user model and a user has a one to many relationship with
articles so I know that: @user.articles.count works. Hence I'm guessing
there's something big I'm missing here.

So, how am I going to do this? How do I easily cycle through my list of
articles and get the previous and next ones?

Any help greatly appreciated. I've been going back and forth over my
books and forums but I can't seem to formulate the question to be able
to ask it.
Philip H. (Guest)
on 2008-11-26 01:11
(Received via mailing list)
On Nov 25, 2008, at 2:40 PM, Theo Graham-brown wrote:

>          c = 0
>          total = @articles.count
....
> guessing
> there's something big I'm missing here.
>
> So, how am I going to do this? How do I easily cycle through my list
> of
> articles and get the previous and next ones?

@user.articles.count is Rails magic.  It's not actually fetching
everything and then counting it up, it's looking at the associations
and building a "SELECT COUNT...."

@articles above is an array.  Try @articles.size.

-philip
Frederick C. (Guest)
on 2008-11-26 20:17
(Received via mailing list)
On Nov 25, 11:10 pm, Philip H. <removed_email_address@domain.invalid> wrote:
> On Nov 25, 2008, at 2:40 PM, Theo Graham-brown wrote:
>
>
> @user.articles.count is Rails magic.  It's not actually fetching  
> everything and then counting it up, it's looking at the associations  
> and building a "SELECT COUNT...."
>
To be quite precise, @user.articles is not an array, it's an
association proxy.

Fred
Theo G. (Guest)
on 2008-11-27 18:13
Thanks both of you.

I've got it working now. :-)
This topic is locked and can not be replied to.