How to pass array of values from controller to partial

Hii

I need to pass an array of vlaues from by controller to the partial.

Please check my action in my controller

def dispfriends
@myfriend=[]
@myfriendlogin = []
@myusers=[]
i=0
@currentgroup = Group.find_by_id(params[:groupid])

puts @currentgroup.id

@currentfriends=
GroupFriend.find_all_by_user_id_and_group_id(current_user.id,@currentgroup.id)

for n in @currentfriends
@myfriend=n.friend_id
@myusers[i] = User.find_by_id(@myfriend)
@myfriendlogin[i]=@myusers[i]
puts @myfriendlogin[i]
i=i+1

end

@myfriendlogin.each do |user|

respond_to do |format|
format.html { render :partial => ‘users/dispfriends’, :collection =>
@myfriendlogin, :as => :user}
end

end

My Partial

<%= link_to user_image_tag(user, 50, :class => 'float_left user_profile_image'), user %>
<%= hcard_link_to_user user.fullname, user %>

I can only display one user. But, when comes to more than one user I get
“Template missing error”.

Please check my action in the controller and help me in this regard.
Thank you.

use like this it will send the @myfriendlogin array to partial
format.html { render :partial => ‘users/dispfriends’, :locals
=>{ :user=>@myfriendlogin}

Hi Ravi

Ravi D. wrote:
@myfriendlogin.each do |user|

respond_to do |format|
format.html { render :partial => ‘users/dispfriends’, :collection =>
@myfriendlogin, :as => :user}
end

end


I think your problem is in the above piece of code - A controller can
only respond to a request once. Your code will work if @myfriendlogin
only has one element, but will fail when it has more than one as the
webserver cannot send multiple responses back to the browser.

The ':collection => ’ bit will already tell the partial to iterate
through the elements of the collection and apply each element to the
partial, so you dont need to put this into a loop.

If you just want to pass stuff to the partial you might want to look at
‘:locals =>’

What are you actually trying to achieve?

On 26 May 2010 08:34, nirosh [email protected] wrote:

use like this it will send the @myfriendlogin array to partial
format.html { render :partial => ‘users/dispfriends’, :locals
=>{ :user=>@myfriendlogin}

No.

There’s no need to use :locals from the controller. The @myfriendlogin
is passed automagically to the view.
You can use the :collection attribute to let Rails do the iteration
from the controller (not very flexible if you want anything else in
the view), or do it yourself inside the view to render a partial
several times there (see page 119 of the 3rd edition of “Agile Web
Development with Rails”).

Pieter H. wrote:

Hi Ravi

Ravi D. wrote:
@myfriendlogin.each do |user|

respond_to do |format|
format.html { render :partial => ‘users/dispfriends’, :collection =>
@myfriendlogin, :as => :user}
end

end


I think your problem is in the above piece of code - A controller can
only respond to a request once. Your code will work if @myfriendlogin
only has one element, but will fail when it has more than one as the
webserver cannot send multiple responses back to the browser.

The ':collection => ’ bit will already tell the partial to iterate
through the elements of the collection and apply each element to the
partial, so you dont need to put this into a loop.

If you just want to pass stuff to the partial you might want to look at
‘:locals =>’

What are you actually trying to achieve?

Thank you for your reply.

I tried with locals, but i get the error.
When i pass collections i get only one user.But, my requirement is to
display all the users in a partial by passing the array form the
controller.

Thankyou.

Ravi D., How did you done it after all?

Thanks

Michael P. wrote:

On 26 May 2010 08:34, nirosh [email protected] wrote:

use like this it will send the @myfriendlogin array to partial
format.html { render :partial => ‘users/dispfriends’, �:locals
=>{ :user=>@myfriendlogin}

No.

There’s no need to use :locals from the controller. The @myfriendlogin
is passed automagically to the view.
You can use the :collection attribute to let Rails do the iteration
from the controller (not very flexible if you want anything else in
the view), or do it yourself inside the view to render a partial
several times there (see page 119 of the 3rd edition of “Agile Web
Development with Rails”).

Thank you All for your replies.

I got the required output.

Thanks.