Problems with link_to and submit_tag


#1

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

<% @users.each do |user| %>
<% 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 %>
<% end %>
Login Email Administrator
<%=h user.login %> <%=h user.email %>

#2

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


#3

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!

<%=h user.login %>
:method => :delete %>
<%= link_to ‘Save’, user, :action => :update %>


<% end %>

<% end %>

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

Thanks,
Sadeesh.


#4

No,
I am saying something like

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

Got it,
Yup.


#5

Thanks Sadeesh

so you’re saying I should use something like:

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


#6

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


#7

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


#8

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

On Dec 3, 1:34 pm, sadeesh kumar viswanathan removed_email_address@domain.invalid


#9

yes, a boolean field…

On Dec 3, 1:49 pm, sadeesh kumar viswanathan removed_email_address@domain.invalid


#10

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


#11

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 %>

On Dec 3, 1:58 pm, sadeesh kumar viswanathan removed_email_address@domain.invalid


#12

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 removed_email_address@domain.invalid


#13

Hey,
try this

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