5

私は、すべてのユーザーが属性の特定の値から始めてほしいWebサイトを作成しています。

クラスは次のとおりです。

class User < ActiveRecord::Base

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

end

Railsコンソール--sandboxで値を変更できます。しかし、私は特定の値でオブジェクトを開始したいと思います。

たとえば、測定を「US」で開始し、bmr_formulaをnilではなく「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!
=> #<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 
4

2 に答える 2

6

コールバックを使用し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
于 2012-08-14T02:46:17.347 に答える
1

before_createを使用してそこに入り、オブジェクトが初めて保存される前に物事をいじくり回すことができます。保存する前に必要な場合は、before_initializeを使用して同様のことを実行できます。

また、self。@ Measurementではなく、self.measurementを設定することもできます。

于 2012-08-14T02:47:02.573 に答える