如何在RoR中初始化Model对象?
我正在创建一个网站,我希望每个用户都可以从属性的某些值开始。
这是class级:
class User < ActiveRecord::Base attr_accessible :name, :email, :goal, :measurement, :bmr_formula, :fat_factor, :protien_factor end
在rails console –sandbox中,我可以更改值。 但我想用某些值启动对象。
例如,我希望测量以“US”开头,bmr_formula以“Katch”开头……等等而不是nil。
现在,一切都从零开始。
我将继续展示我尝试过每次尝试得到的结果。
这是有效的:
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! => # 1.9.3p125 :002 >
感谢大家的帮助!
全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
安慰:
1.9.3p125 :001 > user = User.new("US") => #
课程底部:
def initialize @measurement = "US" # bmr_formula = "katch" # fat_factor = 0.655 # protien_factor = 1.25 end
安慰:
1.9.3p125 :001 > user = User.new => # 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 => # 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
在第一次保存对象之前,您可以使用before_create进入并清除事物。 如果您在保存之前需要它,可以使用before_initialize来完成类似的操作。
你也只想设置自我测量,而不是自我。@ measurement。