I have the following validation on and ''Order'' model: validates_presence_of :order_lines, :message => ''missing one or more products.'', :on => :save Ok, great. An order has to have products. Ok. Problem is, there are some old orders that don''t have lines (don''t ask) and in the admin tool we need to be able to work on these orders. Problem is that we can''t save them since they technically fail validation. In the admin tool I want to be able to get around this. I''m using two methods to update order status, depending on if we''re doing lots of ''em at a time: Order.update(params[:item].keys, params[:item].values) Or just one: @order = Order.find(params[:id]) @order.update_attributes(params[:order]) So, can anyone offer any advice in this scenario to bypass validations and update the objects/save them? Thx, Hunter
On Fri, 2006-03-31 at 16:23 -0800, HH wrote:> I have the following validation on and ''Order'' model: > > validates_presence_of :order_lines, :message => ''missing one or more > products.'', :on => :save > > Ok, great. An order has to have products. Ok. > > Problem is, there are some old orders that don''t have lines (don''t ask) and > in the admin tool we need to be able to work on these orders. > > Problem is that we can''t save them since they technically fail validation. > In the admin tool I want to be able to get around this. > > I''m using two methods to update order status, depending on if we''re doing > lots of ''em at a time: > > Order.update(params[:item].keys, params[:item].values) > > Or just one: > > @order = Order.find(params[:id]) > @order.update_attributes(params[:order]) > > So, can anyone offer any advice in this scenario to bypass validations and > update the objects/save them? >---- maybe I am dense but couldn''t you just use sql to add what you need - be they columns or rows ? ...i.e. insert into ... where ... Craig
On Saturday 01 Apr 2006 01:23, HH wrote:> Problem is that we can''t save them since they technically fail validation. > In the admin tool I want to be able to get around this. > > I''m using two methods to update order status, depending on if we''re doing > lots of ''em at a time: > > Order.update(params[:item].keys, params[:item].values) > > Or just one: > > @order = Order.find(params[:id]) > @order.update_attributes(params[:order]) > > So, can anyone offer any advice in this scenario to bypass validations and > update the objects/save them?Kinda sounds to me like you want: update_attribute_with_validation_skipping See: http://api.rubyonrails.com/classes/ActiveRecord/Validations.html#M000796 Though as far as I know, there''s no way of doing update_attributes and bypassing all validations. Another possibility for you would be to put validation conditions into your model using :if => validates_presence_of :order_lines, :message => ''missing one or more products.'', :on => :save, :if => some_condition HOWEVER, as far as I know, the models aren''t supposed to be tightly linked to the controllers and have a good degree of enforced separation between them, so if you were going to check for the presence of a session variable (or something) in your model, I think you''ll be out of luck as that kind of stuff belongs in the controller. There''s probably a way you could do it but I can''t think right now, sorry! ~Dave -- Dave Silvester Rent-A-Monkey Website Development http://www.rentamonkey.com/ PGP Key: http://www.rentamonkey.com/pgpkey.asc
Another choice is to create the base model without the validations and then inherit from it to add the validations. In the normal case use the properly validated model, but when necessary fall back to the base model. pth