Forum: Ruby on Rails Help in this code..

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Cdcdda30ac4e349c6ffd0819b9e1666f?d=identicon&s=25 Jay Pangmi (jaeezzy)
on 2008-10-21 12:13
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..
D188e591eac11021329b8821a5f954c7?d=identicon&s=25 Ar Chron (railsdog)
on 2008-10-21 20:10
> 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?
Cdcdda30ac4e349c6ffd0819b9e1666f?d=identicon&s=25 Jay Pangmi (jaeezzy)
on 2008-10-22 00:26
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..
D188e591eac11021329b8821a5f954c7?d=identicon&s=25 Ar Chron (railsdog)
on 2008-10-22 15:15
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...
This topic is locked and can not be replied to.