Forum: Ruby on Rails Problems with link_to and submit_tag

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
Nellboy (Guest)
on 2008-12-03 15:05
(Received via mailing list)
ok, so here's my problem... i'll add the code below... I want to
display users, and as an administrator, give other users
administrative priviledges... so, I would perform this in the users
index page... displaying all users and adding a checkbox next to each
one to give administrative priviledges...

I've tried two methods to do this, the first is submit_tag, and the
second is link_to... When I use submit_tag, then theoretically the
boolean value for 'administrator' in the database should be updated,
but it's not... when I use link_to, the page is updated (i.e. the
checkbox shows the correct value), but the database is not... also,
i'm not redirected to where i'm intended... in the 'update' action of
the controller, I've put:

format.html { redirect_to(:controller => "videos") }

but I get redirected to '/users/:id', with the id of the user i've
just edited... why is this?

anyway, here's the /users/index.html.erb code, i've been stumped on
this for a while now, and haven't been able to find anything via
google... any help appreciated... cheers!

  <% @users.each do |user| %>
    <td><%=h user.login %></td>
    <td><%=h %></td>

    <% form_for user do |f| %>
      <% if logged_in? && current_user.administrator? %>
          <%= f.check_box :administrator %></p>
      <% end %>
      <div id="functions">
        <td><%= link_to 'Delete', user, :confirm => 'Are you sure?',
        :method => :delete %></td>
        <td><%= link_to 'Save', user, :action => :update %></td>
        <p><%= submit_tag 'Save' %></p>
    <% end %>
  <% end %>
Thorsten M. (Guest)
on 2008-12-03 15:19
(Received via mailing list)
the problem is more likely in the controller,
so please post that code

Is the right method called?
You can see that in the development.log file
There you can see too, if the params are posted correct
Sadeesh V. (Guest)
on 2008-12-03 15:26
(Received via mailing list)
On Dec 3, 6:05 pm, Nellboy <removed_email_address@domain.invalid> wrote:
> checkbox shows the correct value), but the database is not... also,
> google... any help appreciated... cheers!
>                 <td><%=h user.login %></td>
>                                 :method => :delete %></td>
>                                 <td><%= link_to 'Save', user, :action => :update %></td>
>                         </div>
>                         <!--<td>
>                                 <p><%= submit_tag 'Save' %></p>
>                         </td>-->
>                 <% end %>
>         </tr>
>         <% end %>
> </table>

       While submit a form, you should not use 'link_to' method which
will not submit a form actually. It will simply make a request. You
should use submit_tag. With submit_tag your code was not working
because you have to mention, which action should request go when
submit a form. You have not mentioned any action. So, it's submitting
the form to the current uri which is default one. Thus, database is
not getting updated. try something like in the below reference

Nellboy (Guest)
on 2008-12-03 15:31
(Received via mailing list)
Thanks Sadeesh

so you're saying I should use something like:

<p><%= submit_tag 'Save' :action => update %></p>
Sadeesh V. (Guest)
on 2008-12-03 15:35
(Received via mailing list)
  I am saying something like

<% form_for :person, :url => { :action => "update" } do |f| %>

Got it,
Nellboy (Guest)
on 2008-12-03 15:43
(Received via mailing list)
ok, so I tried this.... and the redirect in the controller is now
working, but the database is not updated... which leads me to the
controller code, which must be wrong... here it is:

def update
    @user = User.find(params[:id])
    respond_to do |format|
      if @user.update_attributes(params[:user])
        flash[:notice] = 'User was successfully updated.'
        format.html { redirect_to(:controller => "videos") }
        format.xml { head :ok }
        flash[:notice] = 'unable to update'
        format.html { redirect_to(:controller => "videos") }
        format.xml { render :xml => @user.errors,
          :status => :unprocessable_entity }
Sadeesh V. (Guest)
on 2008-12-03 15:50
(Received via mailing list)
Really, Do you have field name administrator in user table?
Nellboy (Guest)
on 2008-12-03 15:50
(Received via mailing list)
Hi Sadeesh... thanks for your help

I tried this, and got an error when I tried to update:

"Couldn't find User with ID=update"

so I modified the code to:

<% form_for user, :url => { :action => "update", :id = } do |
f| %>

and I got the same result as before... I'm thinking The problem is
probably with the users_controller :update action... which i've posted
on this thread... I'll continue to investigate

thanks again

On Dec 3, 1:34 pm, sadeesh kumar viswanathan 
Nellboy (Guest)
on 2008-12-03 15:53
(Received via mailing list)
yes, a boolean field...

On Dec 3, 1:49 pm, sadeesh kumar viswanathan 
Sadeesh V. (Guest)
on 2008-12-03 15:59
(Received via mailing list)
then check whats there in params[:user][:administrator] when you
submit the form and go with it.
Nellboy (Guest)
on 2008-12-03 16:23
(Received via mailing list)
ok, so i've done that... and it seems to be submitting a 'false' value
no matter what I click on...

the problem could well be with the following line, maybe it needs some
extra options set:

<%= f.check_box :administrator %></p>

On Dec 3, 1:58 pm, sadeesh kumar viswanathan 
Sadeesh V. (Guest)
on 2008-12-03 17:05
(Received via mailing list)
try this

<%=f.check_box(:administrator, options = {}, checked_value = true,
unchecked_value = false)%>
Nellboy (Guest)
on 2008-12-03 17:20
(Received via mailing list)
ya, i've been playing around with that for a while... i think it's the
issue, but it's not accepting my submissions...

On Dec 3, 2:52 pm, sadeesh kumar viswanathan 
This topic is locked and can not be replied to.