Problems with link_to and submit_tag

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!

<h1>users</h1> <table>   <tr>     <th>Login</th>     <th>Email</th>     <th>Administrator</th>   </tr>   <% @users.each do |user| %>   <tr>     <td><%=h user.login %></td>     <td><%=h user.email %></td>

    <% form_for user do |f| %>       <% if logged_in? && current_user.administrator? %>         <td>           <%= f.check_box :administrator %></p>         </td>       <% end %>       <div id="functions">         <td><%= link_to 'Delete', user, :confirm => 'Are you sure?',         :method => :delete %></td>         <td><%= link_to 'Save', user, :action => :update %></td>       </div>       <!--<td>         <p><%= submit_tag 'Save' %></p>       </td>-->     <% end %>   </tr>   <% end %> </table>

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

Hello,        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

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html

Thanks, Sadeesh.

Thanks Sadeesh

so you're saying I should use something like:

<p><%= submit_tag 'Save' :action => update %></p>

No,   I am saying something like

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

Got it, Yup.

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 }       else         flash[:notice] = 'unable to update'         format.html { redirect_to(:controller => "videos") }         format.xml { render :xml => @user.errors,           :status => :unprocessable_entity }         end       end     end

Really, Do you have field name administrator in user table?

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 = user.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

yes, a boolean field...

then check whats there in params[:user][:administrator] when you submit the form and go with it.

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>

Hey, try this

<%=f.check_box(:administrator, options = {}, checked_value = true, unchecked_value = false)%>

ya, i've been playing around with that for a while... i think it's the issue, but it's not accepting my submissions...