On Sat, Feb 20, 2010 at 4:38 PM, Daniel Guettler <[email protected]>wrote:
> Yes, this is correct and expected, the question to me is rather if it > is expected behavior to assume an update operation if the object > doesn't respond to :new_record? > > Yes, this is expected because AR instance is either new (i.e. hasn't been saved) or not new (i.e. has been saved). One can easily test this in the Rails console. -Conrad > On Feb 20, 7:34 pm, Conrad Taylor <[email protected]> wrote: > > On Sat, Feb 20, 2010 at 4:32 PM, Daniel Guettler > > <[email protected]>wrote: > > > > > So to solve this, the reason why this ends up using :method => :put is > > > the following code in "apply_form_for_options!": > > > > > 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 > > > > Yes, this is basic Rails. PUT HTTP verb translates to an update action. > > > > -Conrad > > > > > > > > > which means for every object not responding to new_record? it will > > > automatically set the method to PUT > > > since the options are reverse merged later with the provided options > > > this can be avoided by setting explicit :html => { :method => :post } > > > in form_for - not sure though if this is entended behavior... > > > > > If someone has some inside view comments would be appreciated... > > > > > On Feb 20, 7:24 pm, Daniel Guettler <[email protected]> wrote: > > > > Ok what is really happening here is that for_for(Session.new, :url => > > > > login_path) includes a hidden input field setting _method to put > which > > > > correctly complains about a routing error since no route is defined > > > > for PUT /login > > > > Remaining question to me is why does form_for set the method to PUT > > > > > > Session.new.new_record? => NoMethodError > > > > Session.new.id => nil > > > > > > On Feb 20, 7:17 pm, Daniel Guettler <[email protected]> > wrote: > > > > > > > ah the last bit of the previous message should have not been in > there, > > > > > but should have been in this message. > > > > > > > Changing the Session class to: > > > > > > > class Session < ActiveRecord::Base > > > > > end > > > > > > > and adding a table to the database (which is not the goal here just > a > > > > > workaround for figuring out what's going on here) makes the > everything > > > > > work correctly with: > > > > > > > form_for(Session.new, :url => login_path) > > > > > > > This clearly shouldn't be related but this is what I have so far... > > > > > > > On Feb 20, 7:11 pm, Daniel Guettler <[email protected]> > wrote: > > > > > > > > not quite the routes you are providing are not equivalent to what > I > > > > > > wanted to archive and they are the only routes in the routing > file > > > for > > > > > > this test. What I want is: > > > > > > > > GET /login should be resolved to session#new > > > > > > POST /login should be resolved to session#create > > > > > > > > possible ways of doing so are according to the action_dispatch/ > > > > > > routing.rb file > > > > > > > > get 'login' => 'session#new' > > > > > > post 'login' => 'session#create', :as => :login > > > > > > > > or when using match > > > > > > > > match 'login' => 'session#new', :via => :get > > > > > > match 'login' => 'session#create', :via => :post > > > > > > > > the above two examples are equivalent since get and post just add > > > > > > the :via => :method to the options and call match > > > > > > > > class Session < ActiveRecord::Base > > > > > > # include ActiveModel::Validations > > > > > > > > attr_accessor :login, :password #, :id > > > > > > > > end > > > > > > > > On Feb 20, 7:02 pm, Conrad Taylor <[email protected]> wrote: > > > > > > > > > On Sat, Feb 20, 2010 at 4:00 PM, Conrad Taylor < > [email protected]> > > > wrote: > > > > > > > > On Sat, Feb 20, 2010 at 3:02 PM, Daniel Guettler < > > > > > > > > [email protected]> wrote: > > > > > > > > > >> Hi, I just ran into this ActionController::RoutingError and > just > > > > > > > >> wanted to check if someone can confirm this as a bug in the > > > Rails 3 > > > > > > > >> beta gem. > > > > > > > > > >> config/routes.rb contains: > > > > > > > > > >> get 'login' => 'session#new' > > > > > > > >> post 'login' => 'session#create', :as => :login > > > > > > > > > > Daniel, can you post the complete route? The 'get' and > 'post' > > > HTTP verbs > > > > > > > > should exist within a member or collection block of a > resource > > > block. For > > > > > > > > example, > > > > > > > > > > resources :posts do > > > > > > > > collection do > > > > > > > > get :search > > > > > > > > end > > > > > > > > end > > > > > > > > > > or > > > > > > > > > > resources :posts do > > > > > > > > get :search, :on => :collection > > > > > > > > end > > > > > > > > > > Note: both of the examples are equivalent. > > > > > > > > > > Next, your routes look ambiguous meaning that you could have > > > easily > > > > > > > > implemented this as follows: > > > > > > > > > > match 'login' => "user_sessions#lnew", :as => :login > > > > > > > > > Correction: match 'login' => "user_sessions#new", :as => > > > :login > > > > > > > > > > match 'login' => "user_sessions#destroy", :as => :logout > > > > > > > > > > Lastly, your URLs will look like the following: > > > > > > > > > >http://localhost:3000/logout > > > > > > > >http://localhost:3000/login > > > > > > > > > > Good luck, > > > > > > > > > > -Conrad > > > > > > > > > >> GET /login works fine: > > > > > > > > > >> Started GET "/login" for 127.0.0.1 at 2010-02-20 17:45:49 > > > > > > > >> SQL (0.3ms) SET SQL_AUTO_IS_NULL=0 > > > > > > > >> Processing by SessionController#new as HTML > > > > > > > >> Rendered session/new.html.haml within > > > layouts/application.html.haml > > > > > > > >> (77.9ms) > > > > > > > >> Completed in 85ms (Views: 84.1ms | ActiveRecord: 0.2ms) with > 200 > > > > > > > > > >> However POST /login gives the following error: > > > > > > > > > >> Started POST "/login" for 127.0.0.1 at 2010-02-20 17:45:58 > > > > > > > >> SQL (0.3ms) SET SQL_AUTO_IS_NULL=0 > > > > > > > > > >> ActionController::RoutingError (No route matches "/login"): > > > > > > > > > >> rake routes returns the expected urls: > > > > > > > > > >> login POST /login > > > > > > > >> {:controller=>"session", :action=>"create"} > > > > > > > >> GET /login > > > > > > > >> {:controller=>"session", :action=>"new"} > > > > > > > > > >> Thanks, Daniel > > > > > > > > > >> -- > > > > > > > >> 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 > > > [email protected]. > > > > > > > >> To unsubscribe from this group, send email to > > > > > > > >> [email protected]<rubyonrails-talk%[email protected]><rubyonrails-talk%2Bunsubscrib > [email protected]><rubyonrails-talk%2Bunsubscrib > > > [email protected]> > > > > > > > >> . > > > > > > > >> For more options, visit this group at > > > > > > > >>http://groups.google.com/group/rubyonrails-talk?hl=en. > > > > > -- > > > 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 [email protected] > . > > > To unsubscribe from this group, send email to > > > [email protected]<rubyonrails-talk%[email protected]><rubyonrails-talk%2Bunsubscrib > [email protected]> > > > . > > > For more options, visit this group at > > >http://groups.google.com/group/rubyonrails-talk?hl=en. > > -- > 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 [email protected]. > To unsubscribe from this group, send email to > [email protected]<rubyonrails-talk%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/rubyonrails-talk?hl=en. > > -- 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 [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

