使用模型中的实例变量

时间:2014-04-14 17:04:02

标签: ruby-on-rails activerecord ruby-on-rails-4

我希望在创建时使用一些变量来实例化“战斗”,我可以在不访问数据库的情况下进行操作,然后在完成所有方法调用和计算之后,将战斗结果保存到数据库中。我希望“player”方法返回在回调中创建的排序数组,但此刻它只返回nil

class Battle < ActiveRecord::Base
    after_create do
      @battlelog = ""
      @field = []
      @conditions = []
      @player = sort_by_initiative(action.character.army.members.map{ |m| [m.unit, m.amount]})      
        @computer = sort_by_initiative(action.instance.members.map{ |m| [m.unit, m.amount]})
    end

    # Associations
    belongs_to :action

    def sort_by_initiative(array)
        array.sort { |a, b| b.first.initiative <=> a.first.initiative }
    end

    def player
        @player
    end

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找attr_accessor :player,(这是Ruby,请参阅Ruby类以获取更多信息),它在模型实例上创建了一个可访问的属性(读取和写入)。 attr_reader :player会为您提供只读属性,如果属性由内部操作设置,则使用该属性。然后,您可以在this_battle.player上调用this_battle作为班级Battle的实例。请记住,如果您调用其他控制器操作或呈现新视图,这些属性通常不会持久,除非您有办法永久存储它们。

相关问题