我希望在创建时使用一些变量来实例化“战斗”,我可以在不访问数据库的情况下进行操作,然后在完成所有方法调用和计算之后,将战斗结果保存到数据库中。我希望“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
答案 0 :(得分:0)
我认为您正在寻找attr_accessor :player
,(这是Ruby,请参阅Ruby类以获取更多信息),它在模型实例上创建了一个可访问的属性(读取和写入)。 attr_reader :player
会为您提供只读属性,如果属性由内部操作设置,则使用该属性。然后,您可以在this_battle.player
上调用this_battle
作为班级Battle
的实例。请记住,如果您调用其他控制器操作或呈现新视图,这些属性通常不会持久,除非您有办法永久存储它们。