如何在 RoR 中初始化模型对象? [英] How do I initialize an Model object in RoR?

查看:54
本文介绍了如何在 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

这篇关于如何在 RoR 中初始化模型对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆