Rails Noob, Math or Array Issue?

Let’s say that below is the math for figuring out a unit in a popular
diet program:

@fiber = Array.new(@food.fiber, 4)
@points = (@food.calories / 50) + (@food.fat / 12) - (@fiber.min /

And that for personal use, I’m creating a system to keep track of
these units on a daily basis and I’m simply rendering @points in the
following manner in my view:

Points: <%= @points %>

But when @points equals 0, I get the nasty message:

NoMethodError in FoodsController#show

You have a nil object when you didn’t expect it!
The error occurred while evaluating nil./

What would one do to make it OK to have a 0 instead of causing it to
evaluate nil?

I goofed up…when the minimum of @fiber = 0, I get the nasty
message…not when @points = 0. I apologize.

On Jul 14, 2:15 pm, “[email protected][email protected]

Finally figured it out on my own with some modifications…

Controller:
def show
@food = Food.find(params[:id])
@fiber = Array.new(@food.fiber.to_f, 4)
@points = (@food.calories.to_f / 50) + (@food.fat.to_f / 12) -
((@fiber.min.to_f) / 5)
end

View:

Points: <%= @points.round %>

Seems to produce the results I want…any better way would be welcome.

On Jul 14, 2:18 pm, “[email protected][email protected]

hmm,
I don’t understand you Array.new statement

Array.new(x, 4) just returns an array with x lots of 4
Array.new(7, 4) = [4,4,4,4,4,4,4]
Array.new(7.3,4) = [4,4,4,4,4,4,4]

@fiber = Array.new(x, 4)
@fiber.min = 4

whatever the x is.

I’d put all the code in the model

class Food
def points
value = 0
value += (calories.to_f / 50) if calories
value += ( fat.to_f / 12) if fat
value += ( fiber.to_f / 5) if fiber
return value
end
end

and just call @food.points in your view

the problem you were having at the start was because one of these
attributes (calories, fat or fiber)
was nil for the model,
I suggest setting :default => 0 in the migration.
Then you can get rid of the "if"s in the code above

[email protected] wrote:

Finally figured it out on my own with some modifications…

Controller:
def show
@food = Food.find(params[:id])
@fiber = Array.new(@food.fiber.to_f, 4)
@points = (@food.calories.to_f / 50) + (@food.fat.to_f / 12) -
((@fiber.min.to_f) / 5)
end

View:

Points: <%= @points.round %>

Seems to produce the results I want…any better way would be welcome.

On Jul 14, 2:18 pm, “[email protected][email protected]

What I need is something that returns the minimum of food.fiber or 4,
whichever is lower. I appreciate your help–I’m just a programming
idiot to begin with and even moreso at Ruby/Rails.

On Jul 14, 3:29 pm, Matthew R. [email protected]