How do I initialize an Model object in RoR?

Viewed 7534

I'm creating a website where I want every user to start off with certain values for their attributes.

Here is the class:

class User < ActiveRecord::Base

  attr_accessible :name, 
              :email, 
              :goal, 
              :measurement, 
              :bmr_formula, 
              :fat_factor, 
              :protien_factor

end

In rails console --sandbox I'm able to change the values. But I want to start the object off with certain values.

For example, I want measurement to begin with "US", bmr_formula to begin with "Katch"...etc instead of nil.

right now, everything starts with nil.

I'll proceed to show what I've tried with the results each attempt got.



Here is what worked:

after_initialize do 
   self[:measurement] = "US" 
   self[:bmr_formula] = "katch"
   self[:fat_factor] = 0.655
   self[:protein_factor] = 1.25
   puts "User has been initialized!"
end


1.9.3p125 :001 > user = User.new
User has been initialized!
=> #<User id: nil, name: nil, email: nil, goal: nil, measurement: "US", bmr_formula: 
"katch", fat_factor: 0, protein_factor: 0, created_at: nil, updated_at: nil> 
1.9.3p125 :002 > 

Thanks for the help everyone!



Full Class:

attr_accessible :name, 
              :email, 
              :goal, 
              :measurement, 
              :bmr_formula, 
              :fat_factor, 
              :protien_factor


def initialize(measurement)                
@measurement = measurement
# bmr_formula = "katch"
# fat_factor = 0.655
# protien_factor = 1.25
  end

Console:

1.9.3p125 :001 > user = User.new("US")
 => #<User not initialized>

Bottom of Class:

 def initialize               
    @measurement = "US"
    # bmr_formula = "katch"
    # fat_factor = 0.655
    # protien_factor = 1.25
  end

Console:

1.9.3p125 :001 > user = User.new
 => #<User not initialized> 
1.9.3p125 :002 > 

Bottom of Class:

self.@measurement = "US"

Console:

SyntaxError: /Users/Nick/Code/Rails/fitness_app/app/models/user.rb:10: syntax error, unexpected tIVAR
self.@measurement = "US"

Class:

after_initialize :measurement, 
                 :bmr_formula, 
                 :fat_factor, 
                 :protien_factor

 def defaults
   self.measurement = "US"
   self.bmr_formula = "katch"
   self.fat_factor = 0.655
   self.protien_factor = 1.25
  end

Console:

1.9.3p125 :001 > user = User.new
 => #<User id: nil, name: nil, email: nil, goal: nil, measurement: nil, bmr_formula:    
nil, fat_factor: nil, protien_factor: nil, created_at: nil, updated_at: nil> 
1.9.3p125 :002 > user.measurement
=> nil 
1.9.3p125 :003 > user.bmr_formula
=> nil 
2 Answers
Related