這是一個對象orientated programming的問題;你不是從模型中調用變量,而是從類中訪問屬性或實例值(在範圍等方面非常重要)。
-
你要麼需要把這些變量作爲class variable,並將它作爲一個實例方法,還是有類方法返回它:
#app/models/model.rb
class Model < ActiveRecord::Base
cattr_accessor :sum #-> Model.sum class variable (static)
@@sum = 10
def self.sum
10 #-> Model.sum class method (static)
end
end
你怎麼做,取決於什麼您希望返回的數據類型。
- 如果數據是靜態,使用類方法/可變
- 如果數據是動態,使用實例方法
以上是你要使用的代碼,如果你想返回一個靜態值。
如果你想返回動態值,你會使用:
#app/models/model.rb
class Model < ActiveRecord::Base
def score
self.games * self.goals # -> @model.sum instance method (dynamic)
end
end
-
不同的是,如果你使用一個類值,它是唯一可用通過類的初始化。 IE你可以撥打Model.sum
並有權訪問該記錄。
實例方法/值僅通過實例的類的訪問:
@model = Model.find 5 #-> creates a new instance of the class
@model.sum #-> pulls the dynamic sum value of the class instance
修復
在你的情況,你最好使用實例方法:
#app/models/abc.rb
class Abc < ActiveRecord::Base
def score
10
end
end
#app/controllers/first_controller.rb
class FirstController < ApplicationController
def get_score
@abc = Abc.new
@abc.sum #-> 10
end
end
這樣,你的數據將是動態的,允許你操縱它等等。
你可以使用'abc'類的任何對象來獲得'score'。 –