如何在 RoR 中初始化模型对象?

问题描述:

我正在创建一个网站,我希望每个用户都从其属性的某些值开始.

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

这是课程:

class User < ActiveRecord::Base

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

end

在 rails 控制台 --sandbox 中,我可以更改这些值.但我想用某些值开始对象.

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

例如,我希望测量以US"开头,bmr_formula 以Katch"开头...等而不是 nil.

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

现在,一切都从 nil 开始.

right now, everything starts with nil.

我将继续展示我的尝试以及每次尝试的结果.

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

这是有效的:

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 > 

感谢大家的帮助!

全班:

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

控制台:

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

班底:

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

控制台:

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

班底:

self.@measurement = "US"

控制台:

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

类:

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

控制台:

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 

我会使用 after_initialize 回调:

after_initialize :default_values
def default_values
  self.status ||= 'P'
  self.measurement = "US"
  self.bmr_formula = "katch"
  self.fat_factor = 0.655
  self.protien_factor = 1.25
end