network DB
2012-Aug-17 00:30 UTC
Rails doesn''t validate create_model or build_model (has_one association)
I''ve got User has_one Shop. Rails is not validating when I tried create_shop or build_shop, neither in the browser nor the rails console. My code: class Shop < ActiveRecord::Base attr_protected :user_id belongs_to :user validates_presence_of :name, :primary_address, :city, :country_code, :currency end class ShopsController < ApplicationController before_filter :signed_in_user, except: [:index, :show] before_filter :correct_user, only: [:edit, :update, :currency, :update_currency] def new @shop = Shop.new end def create @shop = current_user.build_shop(params[:shop]) if @shop.save flash[:success] = "Successfully added a shop." redirect_to user_path(current_user) else render ''new'' end end ... end Error log (when tried in browser): Started POST "/shops" for 127.0.0.1 at 2012-08-17 04:01:22 +0800 Processing by ShopsController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"bA+KBkV1CQTyb3H8lH2dGyOl6YR+Lp2I9jQodxDjXlE=", "shop"=>{"name"=>"", "primary_address"=>"", "secondary_address"=>"", "city"=>"", "postal_code"=>"", "country_code"=>"", "phone"=>"", "email"=>"", "website"=>"", "facebook"=>"", "twitter"=>"", "opening_hours"=>"", "description"=>"", "latitude"=>"", "longitude"=>"", "currency"=>"AED"}, "commit"=>"Add shop"} User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."remember_token" = ''YykvzJ8PCZ5RFeE_ZomLXg'' LIMIT 1 Shop Load (0.4ms) SELECT "shops".* FROM "shops" WHERE "shops"."user_id" = 1 LIMIT 1 (0.1ms) BEGIN (0.1ms) COMMIT (0.1ms) BEGIN (0.1ms) ROLLBACK In rails console: irb(main):001:0> alice = User.find(1) irb(main):002:0> alice.build_shop(name: "Alice Shop") Shop Load (0.6ms) SELECT "shops".* FROM "shops" WHERE "shops"."user_id" = 1 LIMIT 1 (0.1ms) BEGIN (0.1ms) COMMIT => #<Shop id: nil, user_id: 1, name: "Alice Shop", primary_address: nil, secondary_address: nil, city: nil, postal_code: nil, state_code: nil, country_code: nil, phone: nil, email: nil, website: nil, facebook: nil, twitter: nil, opening_hours: nil, description: nil, latitude: nil, longitude: nil, logo: nil, currency: nil, created_at: nil, updated_at: nil> The weird thing is it does validate in the edit form using update_attributes. But not when a User creates a new Shop. -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Colin Law
2012-Aug-17 06:34 UTC
Re: Rails doesn''t validate create_model or build_model (has_one association)
On 17 August 2012 01:30, network DB <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> I''ve got User has_one Shop. Rails is not validating when I tried > create_shop or build_shop, neither in the browser nor the rails console.Those methods create the object but do not save it (see section 4.1.1.3 in the Rails Guide on Associations). Validation happens when the record is saved (or valid? is called). Colin> > My code: > > class Shop < ActiveRecord::Base > attr_protected :user_id > belongs_to :user > validates_presence_of :name, :primary_address, :city, :country_code, > :currency > end > > class ShopsController < ApplicationController > before_filter :signed_in_user, except: [:index, :show] > before_filter :correct_user, only: [:edit, :update, :currency, > :update_currency] > > def new > @shop = Shop.new > end > > def create > @shop = current_user.build_shop(params[:shop]) > > if @shop.save > flash[:success] = "Successfully added a shop." > redirect_to user_path(current_user) > else > render ''new'' > end > end > ... > end > > Error log (when tried in browser): > > Started POST "/shops" for 127.0.0.1 at 2012-08-17 04:01:22 +0800 > Processing by ShopsController#create as HTML > Parameters: {"utf8"=>"✓", > "authenticity_token"=>"bA+KBkV1CQTyb3H8lH2dGyOl6YR+Lp2I9jQodxDjXlE=", > "shop"=>{"name"=>"", "primary_address"=>"", "secondary_address"=>"", > "city"=>"", "postal_code"=>"", "country_code"=>"", "phone"=>"", > "email"=>"", "website"=>"", "facebook"=>"", "twitter"=>"", > "opening_hours"=>"", "description"=>"", "latitude"=>"", "longitude"=>"", > "currency"=>"AED"}, "commit"=>"Add shop"} > User Load (0.4ms) SELECT "users".* FROM "users" WHERE > "users"."remember_token" = ''YykvzJ8PCZ5RFeE_ZomLXg'' LIMIT 1 > Shop Load (0.4ms) SELECT "shops".* FROM "shops" WHERE "shops"."user_id" > = 1 LIMIT 1 > (0.1ms) BEGIN > (0.1ms) COMMIT > (0.1ms) BEGIN > (0.1ms) ROLLBACK > > In rails console: > > irb(main):001:0> alice = User.find(1) > irb(main):002:0> alice.build_shop(name: "Alice Shop") > Shop Load (0.6ms) SELECT "shops".* FROM "shops" WHERE > "shops"."user_id" = 1 LIMIT 1 > (0.1ms) BEGIN > (0.1ms) COMMIT > => #<Shop id: nil, user_id: 1, name: "Alice Shop", primary_address: nil, > secondary_address: nil, city: nil, postal_code: nil, state_code: nil, > country_code: nil, phone: nil, email: nil, website: nil, facebook: nil, > twitter: nil, opening_hours: nil, description: nil, latitude: nil, > longitude: nil, logo: nil, currency: nil, created_at: nil, updated_at: > nil> > > The weird thing is it does validate in the edit form using > update_attributes. But not when a User creates a new Shop. > > -- > 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. > >-- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
network DB
2012-Aug-17 10:07 UTC
Re: Rails doesn''t validate create_model or build_model (has_one association)
Colin Law wrote in post #1072628:> On 17 August 2012 01:30, network DB <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote: >> I''ve got User has_one Shop. Rails is not validating when I tried >> create_shop or build_shop, neither in the browser nor the rails console. > > Those methods create the object but do not save it (see section > 4.1.1.3 in the Rails Guide on Associations). Validation happens when > the record is saved (or valid? is called). > > ColinYeah but in the browser, it just went straight to the show action without showing any validation warning at all. If it fails validation, it should render the shops#new action again. Here''s the error message it gives me when I click submit in the shops#new form without inputting anything and then it tried to go to the show action: Routing Error No route matches {:action=>"show", :controller=>"shops", :id=>#<Shop id: nil, user_id: 1, name: "", primary_address: "", secondary_address: "", city: "", postal_code: "", state_code: nil, country_code: "", phone: "", email: "", website: "", facebook: "", twitter: "", opening_hours: "", description: "", latitude: nil, longitude: nil, logo: nil, currency: "AED", created_at: nil, updated_at: nil>} -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.
Colin Law
2012-Aug-17 15:17 UTC
Re: Re: Rails doesn''t validate create_model or build_model (has_one association)
On 17 August 2012 11:07, network DB <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> Colin Law wrote in post #1072628: >> On 17 August 2012 01:30, network DB <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote: >>> I''ve got User has_one Shop. Rails is not validating when I tried >>> create_shop or build_shop, neither in the browser nor the rails console. >> >> Those methods create the object but do not save it (see section >> 4.1.1.3 in the Rails Guide on Associations). Validation happens when >> the record is saved (or valid? is called). >> >> Colin > > Yeah but in the browser, it just went straight to the show action > without showing any validation warning at all. If it fails validation, > it should render the shops#new action again.Well you have a bug in your code then. Have a look in development.log to see what happens when you click the link. Then have a look at the Rails Guide on Debugging to get further ideas on how to debug the code.> > Here''s the error message it gives me when I click submit in the > shops#new form without inputting anything and then it tried to go to the > show action: > > Routing Error > > No route matches {:action=>"show", :controller=>"shops", :id=>#<Shop id: > nil, user_id: 1, name: "", primary_address: "", secondary_address: "", > city: "", postal_code: "", state_code: nil, country_code: "", phone: "", > email: "", website: "", facebook: "", twitter: "", opening_hours: "", > description: "", latitude: nil, longitude: nil, logo: nil, currency: > "AED", created_at: nil, updated_at: nil>} > > -- > 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > For more options, visit https://groups.google.com/groups/opt_out. > >-- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.