Passing values from partial to controller

I am trying to pass login and group_name from partial to controller, but
I dont get the values.

I see the following error:
RuntimeError in UsersController#addfriendtogroups

Called id for nil, which would mistakenly be 4 – if you really wanted
the id of nil, use object_id

I tried in the console, where I get the result. But, in application I
cannot pass the values.

html page

<% @groups.each do |user| %>
<%= render :partial => ‘users/grouprow’, :locals => {:user
=> user}%>

          <% end %>

Partial

        <p>
          <span title="Click to edit" id="edit_location">

<%= link_to user.group_name %>

<%= custom_button('Change') %>
        </p>
      </div>
<% form_tag (:controller => "users" , :action => "addfriendtogroups") do %>
    Add friend:
     <%= text_field_with_auto_complete :user, 'login', {:size =>

20}, {:tokens => ‘,’} %>

        <%= submit_tag "Add to group", :class =>

“submit_input_button rounded_corner” %>
<% end %>

</div>

Controller

def addfriendtogroups
@f=User.find_by_login(params[:login]).id
@g=Group.find_by_group_name(params[:group_name]).id

@addfriend=GroupFriend.create(:user_id => current_user.id ,
:group_id => @g,:friend_id => @f)

respond_to do |format|

if @addfriend.save

flash[:notice] = “Friend added to group successfully.”
format.html {redirect_to :back}

end

end
end

hi,

pass your parameters to your partial like this:
<%=render :partial => ‘users/grouprow’ ,:collection => @groups%>

and when you want to call the parameters in your partial, you have to
call it by the name of your partial so it will be something like this:

grouprow.id
grouprow.name

Greg

Gregor P. wrote:

hi,

pass your parameters to your partial like this:
<%=render :partial => ‘users/grouprow’ ,:collection => @groups%>

and when you want to call the parameters in your partial, you have to
call it by the name of your partial so it will be something like this:

grouprow.id
grouprow.name

Greg

Thanks Greg for the reply.

I can display the values in my partial.
My problem is I need to pass the values from my partial to the
controller.

I have a link, textbox and button in my partial.
The link holds groupname. the textbox holds friendname.
When I click Add button, the friend in the textbox should be added to
the group and insert into the table.
My def in controller

Controller

def addfriendtogroups
@f=User.find_by_login(params[:login]).id
@g=Group.find_by_group_name(params[:group_name]).id

@addfriend=GroupFriend.create(:user_id => current_user.id ,
:group_id => @g,:friend_id => @f)

respond_to do |format|

if @addfriend.save

flash[:notice] = “Friend added to group successfully.”
format.html {redirect_to :back}

end

end
end

Please correct the def.

Thanks.

Hi,

I think your problem is this line:
@g=Group.find_by_group_name(params[:group_name]).id

you want to pass the params :group_name which are nil because in your
form you don’t pass the :group_name to your controller:

<% form_tag (:controller => “users” , :action => “addfriendtogroups”)
do %>

   Add friend:
    <%= text_field_with_auto_complete :user, 'login', {:size =>

20}, {:tokens => ‘,’} %>

       <%= submit_tag "Add to group", :class =>

“submit_input_button rounded_corner” %>
<% end %>

So pass your :group_name trough a hidden field to your controller

hidden_field

Am 19.05.2010 um 13:07 schrieb Ravi D.:

Gregor P. wrote:

Hi,

I think your problem is this line:
@g=Group.find_by_group_name(params[:group_name]).id

you want to pass the params :group_name which are nil because in your
form you don’t pass the :group_name to your controller:

<% form_tag (:controller => “users” , :action => “addfriendtogroups”)
do %>

   Add friend:
    <%= text_field_with_auto_complete :user, 'login', {:size =>

20}, {:tokens => ‘,’} %>

       <%= submit_tag "Add to group", :class =>

“submit_input_button rounded_corner” %>
<% end %>

So pass your :group_name trough a hidden field to your controller

hidden_field

Am 19.05.2010 um 13:07 schrieb Ravi D.:

I tried with a hidden field
<% form_tag (:controller => “users” , :action => “addfriendtogroups”) do
%>

Add friend:
   <%= text_field_with_auto_complete :user, 'login', {:size => 20}, 

{:tokens => ‘,’} %>
<%= hidden_field_tag :group_name %>
<%= submit_tag “Add to group”, :class =>
“submit_input_button rounded_corner” %>
<% end %>

but it still a nil value.

The error :

RuntimeError in UsersController#addfriendtogroups

Called id for nil, which would mistakenly be 4 – if you really wanted
the id of nil, use object_id

Request

Parameters:

{“group_name”=>"",
“commit”=>“Add to group”,
“authenticity_token”=>“MHB8Ys8vccsGwbgnsb9r5T68oqirPpW6YUscfDojZhY=”,
“id”=>“testing”,
“user”=>{“login”=>“santosh”}}

where ‘testing’ is current user login, santosh is friend, and my
group_name is passing null value.

Gregor P. wrote:

yeah that’s because you pass only one parameter to the hidden_field_tag
so you got this:

and your value is still nil, so you have to pass a second parameter to
the hidden_field_tag to set the value:

<%=hidden_field_tag :group_name, “yourgroupname”%>
then you got this in html

now you should get with params[:group_name] the value that you set

hope this works :slight_smile:

Thanks Gregor P… I am able to pass the values but plz check my
action in the controller.
RuntimeError in UsersController#addfriendtogroups

Called id for nil, which would mistakenly be 4 – if you really wanted
the id of nil, use object_id

Request

Parameters:

{“group_name”=>“testinggroup2”,
“commit”=>“Add to group”,
“authenticity_token”=>“MHB8Ys8vccsGwbgnsb9r5T68oqirPpW6YUscfDojZhY=”,
“id”=>“testing”,
“user”=>{“login”=>“santosh”}}

I need to get the id from login( santosh) and id from Group
(testinggroup2)
and insert the both ids into another table.

Please help. Thank you.

def addfriendtogroups
@f=User.find_by_login(params[:login]).id
@g=Group.find_by_group_name(params[:group_name]).id

@addfriend=GroupFriend.create(:user_id => current_user.id ,
:group_id => @g,:friend_id => @f)

respond_to do |format|

if @addfriend.save

flash[:notice] = “Friend added to group successfully.”
format.html {redirect_to :back}

end

end
end

yeah that’s because you pass only one parameter to the hidden_field_tag
so you got this:

and your value is still nil, so you have to pass a second parameter to
the hidden_field_tag to set the value:

<%=hidden_field_tag :group_name, “yourgroupname”%>
then you got this in html

now you should get with params[:group_name] the value that you set

hope this works :slight_smile:

I can’t see an error in your controller,
the only think i see ist that you got for your username this parameter:
“user”=>{“login”=>“santosh”}

so what you can probably try is to change your input type into this:
<%= text_field_with_auto_complete :user {:size =>
20}, {:tokens => ‘,’} %>

and your controller in this
@f=User.find_by_login(params[:user]).id

i hope that your column login in the Model User is expecting a String
with the Name and not an id.

Am 19.05.2010 um 14:24 schrieb Ravi D.:

Gregor P. wrote:

I can’t see an error in your controller,
the only think i see ist that you got for your username this parameter:
“user”=>{“login”=>“santosh”}

so what you can probably try is to change your input type into this:
<%= text_field_with_auto_complete :user {:size =>
20}, {:tokens => ‘,’} %>

and your controller in this
@f=User.find_by_login(params[:user]).id

i hope that your column login in the Model User is expecting a String
with the Name and not an id.

Am 19.05.2010 um 14:24 schrieb Ravi D.:

Still the same error, Panek.
It was not solved.