I am having trouble getting form_for to use method :put for my edit view which has been driving me crazy. in the controller i have User.find, not User.new so i can''t figure out why this always generates a method post. i have tried the following and they all generate method = post, even when i specify :method => :put!!! <% form_for(:user) do |f| %> <% form_for(:user, @user) do |f| %> <% form_for(:user, @user, :url => admin_site_user_path ) do |f| %> <% form_for :user, @usert, :url => admin_site_user_path, :html => { :method => :put, :class => "edit_post", :id => "edit_post_14" } do | f| %> <% form_for(:user, :url => admin_site_user_path, :method => :put ) do |f| %> digging through rails i found form_helper.rb with apply_form_for_options! which looks like where rails decides if it should be a put or post and to where. def apply_form_for_options!(object_or_array, options) #:nodoc: ...... html_options if object.respond_to?(:new_record?) && object.new_record? { :class => dom_class(object, :new), :id => dom_id(object), :method => :post } else { :class => dom_class(object, :edit), :id => dom_id(object, :edit), :method => :put } end .... . end there is the "if object.respond_to?(:new_record?) && object.new_record?" so i added that to my view and that detects things correctly, but the form still is a post??? see my code below and HOPEFULLY tell me what i am doing wrong i have a User model created by restful_authentication ## controller class Admin::SiteUsersController < ApplicationController before_filter :login_required require_role :admin def edit @user = User.find(params[:id]) render :layout => false end end ## edit view <%= error_messages_for :user %> <h2> <% if @user.respond_to?(:new_record?) && @user.new_record? %> NEW RECORD should be post <% else %> OLD RECORD should be put <% end %> </h2> <% form_for(:user, :url => admin_site_user_path ) do |f| %> <%= f.text_field :login %> <%= f.text_field :email %> <%= f.submit ''Update'' %> <% end %> ## generated html <h2>OLD RECORD should be put</h2> <form action="/admin/site_users/14" method="post"> <div style="margin:0;padding:0"> <input name="authenticity_token" type="hidden" value="41ae3eb40f87bff79db0ab1aa52a13a5fef7a0e8" /> </div> <input id="user_login" name="user[login]" size="30" type="text" value="scott" /> <input id="user_email" name="user[email]" size="30" type="text" value="scott-hcDgGtZH8xNBDgjK7y7TUQ@public.gmane.org" /> <input id="user_submit" name="commit" type="submit" value="Update" /></form> --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
i am still having trouble with this. anyone have any insight how to fix this? On Sep 26, 5:10 pm, scott <scot...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> I am having trouble getting form_for to use method :put for my edit > view which has been driving me crazy. in the controller i have > User.find, not User.new so i can''t figure out why this always > generates a method post. > > i have tried the following and they all generate method = post, even > when i specify :method => :put!!! > > <% form_for(:user) do |f| %> > <% form_for(:user, @user) do |f| %> > <% form_for(:user, @user, :url => admin_site_user_path ) do |f| %> > <% form_for :user, @usert, :url => admin_site_user_path, :html => > { :method => :put, :class => "edit_post", :id => "edit_post_14" } do | > f| %> > <% form_for(:user, :url => admin_site_user_path, :method => :put ) do > |f| %> > > digging through rails i found form_helper.rb with > apply_form_for_options! which looks like where rails decides if it > should be a put or post and to where. > > def apply_form_for_options!(object_or_array, options) #:nodoc: > ...... > html_options > if object.respond_to?(:new_record?) && object.new_record? > { :class => dom_class(object, :new), :id => > dom_id(object), :method => :post } > else > { :class => dom_class(object, :edit), :id => > dom_id(object, :edit), :method => :put } > end > .... > . end > > there is the "if object.respond_to?(:new_record?) && > object.new_record?" so i added that to my view and that detects things > correctly, but the form still is a post??? > > see my code below and HOPEFULLY tell me what i am doing wrong > > i have a User model created by restful_authentication > > ## controller > class Admin::SiteUsersController < ApplicationController > before_filter :login_required > require_role :admin > def edit > @user = User.find(params[:id]) > render :layout => false > end > end > > ## edit view > <%= error_messages_for :user %> > <h2> > <% if @user.respond_to?(:new_record?) && @user.new_record? %> > NEW RECORD should be post > <% else %> > OLD RECORD should be put > <% end %> > </h2> > <% form_for(:user, :url => admin_site_user_path ) do |f| %> > <%= f.text_field :login %> > <%= f.text_field :email %> > <%= f.submit ''Update'' %> > <% end %> > > ## generated html > <h2>OLD RECORD should be put</h2> > <form action="/admin/site_users/14" method="post"> > <div style="margin:0;padding:0"> > <input name="authenticity_token" type="hidden" > value="41ae3eb40f87bff79db0ab1aa52a13a5fef7a0e8" /> > </div> > <input id="user_login" name="user[login]" size="30" type="text" > value="scott" /> > <input id="user_email" name="user[email]" size="30" type="text" > value="sc...-hcDgGtZH8xNBDgjK7y7TUQ@public.gmane.org" /> > <input id="user_submit" name="commit" type="submit" value="Update" / > > </form>--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Try this: <% form_for :user, :url => user_path(current_user), :html => {:method => :put} do |f| -%> Note that the put method is not officially supported, so when the HTML is directed as above, a hidden variable _method is introduced which the Rails router than interprets as a PUT eventhough technically the form is being submitted as a POST. HTH, Han Yuan On Sep 30, 12:54 pm, scott <scot...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> i am still having trouble with this. anyone have any insight how to > fix this? > > On Sep 26, 5:10 pm, scott <scot...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > I am having trouble getting form_for to use method :put for my edit > > view which has been driving me crazy. in the controller i have > > User.find, not User.new so i can''t figure out why this always > > generates a method post. > > > i have tried the following and they all generate method = post, even > > when i specify :method => :put!!! > > > <% form_for(:user) do |f| %> > > <% form_for(:user, @user) do |f| %> > > <% form_for(:user, @user, :url => admin_site_user_path ) do |f| %> > > <% form_for :user, @usert, :url => admin_site_user_path, :html => > > { :method => :put, :class => "edit_post", :id => "edit_post_14" } do | > > f| %> > > <% form_for(:user, :url => admin_site_user_path, :method => :put ) do > > |f| %> > > > digging through rails i found form_helper.rb with > > apply_form_for_options! which looks like where rails decides if it > > should be a put or post and to where. > > > def apply_form_for_options!(object_or_array, options) #:nodoc: > > ...... > > html_options > > if object.respond_to?(:new_record?) && object.new_record? > > { :class => dom_class(object, :new), :id => > > dom_id(object), :method => :post } > > else > > { :class => dom_class(object, :edit), :id => > > dom_id(object, :edit), :method => :put } > > end > > .... > > . end > > > there is the "if object.respond_to?(:new_record?) && > > object.new_record?" so i added that to my view and that detects things > > correctly, but the form still is a post??? > > > see my code below and HOPEFULLY tell me what i am doing wrong > > > i have a User model created by restful_authentication > > > ## controller > > class Admin::SiteUsersController < ApplicationController > > before_filter :login_required > > require_role :admin > > def edit > > @user = User.find(params[:id]) > > render :layout => false > > end > > end > > > ## edit view > > <%= error_messages_for :user %> > > <h2> > > <% if @user.respond_to?(:new_record?) && @user.new_record? %> > > NEW RECORD should be post > > <% else %> > > OLD RECORD should be put > > <% end %> > > </h2> > > <% form_for(:user, :url => admin_site_user_path ) do |f| %> > > <%= f.text_field :login %> > > <%= f.text_field :email %> > > <%= f.submit ''Update'' %> > > <% end %> > > > ## generated html > > <h2>OLD RECORD should be put</h2> > > <form action="/admin/site_users/14" method="post"> > > <div style="margin:0;padding:0"> > > <input name="authenticity_token" type="hidden" > > value="41ae3eb40f87bff79db0ab1aa52a13a5fef7a0e8" /> > > </div> > > <input id="user_login" name="user[login]" size="30" type="text" > > value="scott" /> > > <input id="user_email" name="user[email]" size="30" type="text" > > value="sc...-hcDgGtZH8xNBDgjK7y7TUQ@public.gmane.org" /> > > <input id="user_submit" name="commit" type="submit" value="Update" / > > > </form>--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Scott Nj wrote:> <% form_for(:user) do |f| %> > <% form_for(:user, @user) do |f| %> > <% form_for(:user, @user, :url => admin_site_user_path ) do |f| %> > <% form_for :user, @usert, :url => admin_site_user_path, :html => > { :method => :put, :class => "edit_post", :id => "edit_post_14" } do | > f| %> > <% form_for(:user, :url => admin_site_user_path, :method => :put ) do > |f| %> >Wow, Scott. Sorry to hear you''re having so much trouble. I was just working with a form_for today, but my problem was getting the multipart working correctly. But to address your issue, I simply do this: form_for(@user) do |f| and it works. The only difference between what I do and your list of trials is that I actually specify the instance variable instead of the symbol. I would like to think that would not matter, but you never know. And in case you need multipart for file uploads: form_for( @user, :html => {:multipart => true}) do |f| Peace. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
hyuan wrote:> Try this: > > <% form_for :user, :url => user_path(current_user), :html => {:method > => :put} do |f| -%> > > Note that the put method is not officially supported, so when the HTML > is directed as above, a hidden variable _method is introduced which > the Rails router than interprets as a PUT eventhough technically the > form is being submitted as a POST. > > HTH, > > Han YuanThanks hyuan , this does works. I was routes map.resources "parties" , :controller => "political_parties" so there is no way i can use form_for(@political_party) do |f| as it will create wrong pathname. so i did this <% form_for :political_party, :url => party_path(@political_party) , :html => {:method => :put } do |f| %> -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---