How do I tell an object it is invalid?

Hi,

How do I tell an object that it is not valid? My model is

class EcOrder < ActiveRecord::Base         has_many :ec_line_items         validates_associated :ec_line_items         ... end

and in addition to the above, I want the model to only be valid is it has one or more valid :ec_line_items. So when creating it, can I set its status to invalid if I don't detect it has been assigned multiple child line_items?

                  @ec_order = EcOrder.new(params[:ec_order])     # See if it has line items and if not, set status to invalid.     if (!@ec_order.valid?)       # Do something     }

Thanks for your thoughts and ideas, - Dave

Hi Dave,

and in addition to the above, I want the model to only be valid is it has one or more valid :ec_line_items. So when creating it, can I set its status to invalid if I don't detect it has been assigned multiple child line_items?

You can write a custom validation in the model:

  def validate     errors.add(:ec_line_items, "is empty") if ec_line_items.empty?   end

Hey Roderick, Thanks. This works great. One follow up I have is I notice when I'm redirected back to the original view because my model failed validation I have this line

<% error_messages_for :ec_order %>

but nothing gets printed out. Here's the action in the controller

        def summary                 # Get the subscriber corresponding to the client.                 params[:ec_order][:user_id] = session[:user_id]                 @user = User.find(session[:user_id])                 params[:ec_order][:subscriber_id] = @user.user_id                 @ec_order = EcOrder.new(params[:ec_order])                 if (params[:form] != nil)                         for form_item_id in params[:form][:form_items]                                 @form_item = FormItem.find(form_item_id)

@ec_order.ec_line_items.build(:form_item_id => form_item_id,                                                                :description => @form_item.description,                                                                :day_supply => @form_item.day_supply,                                                                :prescription_number => @form_item.prescription_number)                         end                 end                 if (!@ec_order.valid?)                         @form = Form.find_by_user_id(@user.id)                         render :action => 'new'                 else                         session[:ec_order] = @ec_order                 end         end

Not sure if I needed to do anything extra with the method you gave me, but I thought adding to the "errors" was the way to go. Thanks again for your help, - Dave