Forum: Ruby on Rails Expecting a definrd model id, but returning object id

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.
Bontina C. (Guest)
on 2007-01-18 17:06
@u=User.find(session[:user_id])
   @friends=@u.friends
   #puts @friends
   #render :partial => "friend", :collection => @friends

   @friendpicks =@u.friends.collect{|x| x.products.sort_by{|x|
x.id}.reverse.first(10)}

--------------------------so far no
problem---------------------------------------

   @friendpicks.id
(irb):21: warning: Object#id will be deprecated; use Object#object_id
=> 29883400

-----------------------------------------------------------------------------------
I've checked that @friendpicks is an array with
#<Product:0x449263c>
#<Product:0x4492678>
#<Product:0x44926b4>
#<Product:0x448cb88>

but somehow they are all treated as objects and all the methods for
product becomes strangers.

Anyone knows why I'm getting this?
Any help is highly appreciated.


Abon
Daniel N. (Guest)
on 2007-01-18 17:20
(Received via mailing list)
The answer is that @friendpicks is an array and that you are getting
the object id of the array, not the model ids of the contents of the
@friendpicks array.

You probablly want something more like

@friendpicks.each do |pick|
  pick.id
end

On 1/18/07, Bontina C. <removed_email_address@domain.invalid> wrote:
> --------------------------so far no
> #<Product:0x44926b4>
>
> --
> Posted via http://www.ruby-forum.com/.
>
> >
>


--
-Dan Nugent
Bontina C. (Guest)
on 2007-01-19 03:52
Daniel N. wrote:
> The answer is that @friendpicks is an array and that you are getting
> the object id of the array, not the model ids of the contents of the
> @friendpicks array.
>
> You probablly want something more like
>
> @friendpicks.each do |pick|
>   pick.id
> end
>
> On 1/18/07, Bontina C. <removed_email_address@domain.invalid> wrote:
>> --------------------------so far no
>> #<Product:0x44926b4>
>>
>> --
>> Posted via http://www.ruby-forum.com/.
>>
>> >
>>
>
>
> --
> -Dan Nugent

It still returns the object id.
Anyway I can turn it to a product?
Thanks
Daniel N. (Guest)
on 2007-01-19 17:31
(Received via mailing list)
Hmm.. sorry, I think I missed a level of nesting.

@friendpicks = @u.friends.collect do |friend|
  friend.products.sort_by do |product|
    product.id
  end.reverse.first(10)
end

So, if I've reinterpreted this right, you're getting a list of lists
of 10 products each, sorted by their id, then reversed.

So to access each of the lists you want @friendpicks.each.  Then to
access each of the picks lists you want @friendpicks.each{|pick|
pick.each} Which will ultimately get you:

@friendpicks.each do |picks|
  picks.each do |pick|
    pick.id
  end
end

Now, if you've got your console open, you can check the class of each
of the objects by using the class method, and if you want to inspect
them, try either p or inspect.

On 1/18/07, Bontina C. <removed_email_address@domain.invalid> wrote:
> > end
> >
>
> >
>


--
-Dan Nugent
Bontina C. (Guest)
on 2007-01-20 06:27

I am not sure I'm getting [[p p][p p][p p p]]
or [p p p p p p].
I would like a [[p p][p p][p p p]] transforming to a [p p p p p p].
Thanks
Daniel N. (Guest)
on 2007-01-20 07:25
(Received via mailing list)
Okey doke.  I thought you just wanted to iterate through the elements.
 In that case, just add .flatten to the end of that method chain, like
so:

@friendpicks =@u.friends.collect{|x| x.products.sort_by{|x|
x.id}.reverse.first(10)}.flatten

Now, @friendpicks is an array of product objects.  Sorry I
misunderstood!

On 1/19/07, Bontina C. <removed_email_address@domain.invalid> wrote:
>
> >
>


--
-Dan Nugent
Bontina C. (Guest)
on 2007-01-21 04:34
Thanks for all your help.

I'm get an array of products now.
This topic is locked and can not be replied to.