Help in this code..

Hi, I'm trying to validate couple of things in the controller as I couldn't figure out how I can implement the same in the models. I'm trying to check the 'children' field in the form and if its nil, it checks the 'family claim' check box and if its ticked show error message and if this is validated ok then checks that the sum of children and parents field's values don't exceed 8. If everything's fine then do the saving in the carts table. Here's how I've implemented it but doesn't do the job for the combination of children and family claim field:

CONTROLLER:

def add_to_cart     if params[:children].nil?       if params[:family_claim]=="1"         return (redirect_to_booking("You can't claim for family rate without children."))       end     else       if ((params[:parents].to_i) + (params[:children].to_i)) > 8         return (redirect_to_booking("Maximum 8 people in a group."))       end     end     if params[:family_claim] != "1"       total = (((params[:parents].to_i + params[:children].to_i) * 4.85) * params[:nights].to_i)     else       total = (19.4 * params[:nights].to_i)     end     @cart=find_cart     carts=Cart.create(:campsite => params[:camp][:id], :arrival_date => params[:arrival_date],                      :nights => params[:nights], :parents => params[:parents],                      :children => params[:children], :family_claim => params[:family_claim],                      :total => total)     if carts.save       @cart << carts.id       @cart_details = find_items_in_session     else       redirect_to_booking("Invalid input. Details couldn't be stored. Please Try Again..")     end end

Any suggestions.. thanks..

CONTROLLER:

def add_to_cart     if params[:children].nil?       if params[:family_claim]=="1"         return (redirect_to_booking("You can't claim for family rate without children."))       end     else       if ((params[:parents].to_i) + (params[:children].to_i)) > 8         return (redirect_to_booking("Maximum 8 people in a group."))       end     end     if params[:family_claim] != "1"       total = (((params[:parents].to_i + params[:children].to_i) * 4.85) * params[:nights].to_i)     else       total = (19.4 * params[:nights].to_i)     end

def add_to_cart   @cart=find_cart   carts=Cart.create(:campsite => params[:camp][:id],    :arrival_date => params[:arrival_date],    :nights => params[:nights],    :parents => params[:parents],    :children => params[:children],    :family_claim => params[:family_claim],    :total => total)

  msg = ''   # stick all that logic in the cart model   if carts.validate_input_rules(msg)     if carts.save       @cart << carts.id       @cart_details = find_items_in_session     else       msg = 'Bad input, try again msg'     end   end   unless msg.empty?     redirect_to_booking msg   end end

Maybe?

Ar Chron wrote:

def add_to_cart   @cart=find_cart   carts=Cart.create(:campsite => params[:camp][:id],    :arrival_date => params[:arrival_date],    :nights => params[:nights],    :parents => params[:parents],    :children => params[:children],    :family_claim => params[:family_claim],    :total => total)

  msg = ''   # stick all that logic in the cart model   if carts.validate_input_rules(msg)     if carts.save       @cart << carts.id       @cart_details = find_items_in_session     else       msg = 'Bad input, try again msg'     end   end   unless msg.empty?     redirect_to_booking msg   end end

Maybe?

thanks for the reply Ar Chron!! but what will the implementation of the 'validate_input_rules()' in model be like coz the code i presented in my first post don't seem to do what it is meant for as even though the children field is empty and user select the family rate claim check box it gets validated ok and the details get saved which actually shouldn't happen. so, how can i improve tat code to eliminate this bug? thanks..

Jay Pangmi wrote:

even though the children field is empty and user select the family rate claim check box it gets validated ok and the details get saved which actually shouldn't happen. so, how can i improve tat code to eliminate this bug? thanks..

See if you're receiving an empty parameter in params[:children]...

Raqther than params[:children].nil?, try .empty?

def validate_input_rules   msg = ''   if self.children.empty?     if self.family_claim == '1'       msg = No family rate without children.'     end   else     if self.parents.to_i + self.children.to_i > 8       msg = 'Maximum 8 people in a group.'     end   end   if self.family_claim != '1'     total = (((self.parents.to_i + self.children.to_i) * 4.85) * self.nights.to_i)   else     total = (19.4 * self.nights.to_i)   end   return msg end

I've been bitten by the nil vs empty enough times in the past... and check that code to make sure I didn't fubar something...