2015-12-29 143 views
2

我剛剛開始學習Ruby on Rails,我想知道是否有一種方法可以訪問模型方法中定義的變量。我有一個控制器,我想訪問變量。 我有一個模型訪問控制器中模型方法內定義的變量。

class abc 
def score 
    sum = 10 
end 
end 

而且還有一個控制器

class FirstController < ApplicationController 
def get_score 
end 
end 

所以我想變總和的方法get_score值。我怎樣才能做到這一點?

+0

你可以使用'abc'類的任何對象來獲得'score'。 –

回答

2

這是一個對象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 

這樣,你的數據將是動態的,允許你操縱它等等。

2

在ruby方法返回最後一個語句值,如果return語句沒有明確返回。 您可以通過以下方式訪問比分:

class FirstController < ApplicationController 
def get_score 
     Abc.new.score 
end 
end 

記住類名總是使用大寫字母。

1

在你abc.rb模型文件:

class Abc < ActiveRecord::Base 
    def self.score 
    sum = 10 
    end 
end 

現在你可以使用型號名稱訪問得分方法在任何地方想。

class FirstController < ApplicationController 
def get_score 
    Abc.score # you will get 10 here 
end 
end 
相關問題