访问控制器中模型方法中定义的变量。

时间:2015-12-29 05:43:35

标签: ruby-on-rails ruby

我刚刚开始学习Ruby on Rails,我想知道是否有办法可以访问模型方法中定义的变量。我有一个控制器,我想访问变量。 我有一个模特

class abc
 def score
  sum = 10
 end
end

还有一个控制器

class FirstController < ApplicationController
 def get_score
 end
end

所以我想在方法get_score中得到变量sum的值。我怎样才能做到这一点?

3 个答案:

答案 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