我刚刚开始学习Ruby on Rails,我想知道是否有办法可以访问模型方法中定义的变量。我有一个控制器,我想访问变量。 我有一个模特
class abc
def score
sum = 10
end
end
还有一个控制器
class FirstController < ApplicationController
def get_score
end
end
所以我想在方法get_score中得到变量sum的值。我怎样才能做到这一点?
答案 0 :(得分:2)
如果return语句未显式返回,则在ruby方法中返回最后一个语句值。 您可以按如下方式访问分数:
class FirstController < ApplicationController
def get_score
Abc.new.score
end
end
请记住,班级名称始终以大写字母开头。
答案 1 :(得分: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 :(得分: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