Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在模型中使用实例变量_Ruby On Rails_Activerecord_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 在模型中使用实例变量

Ruby on rails 在模型中使用实例变量,ruby-on-rails,activerecord,ruby-on-rails-4,Ruby On Rails,Activerecord,Ruby On Rails 4,我想在创建时使用一些变量实例化一场战斗,这些变量可以在不访问数据库的情况下进行操作,然后首先在完成所有方法调用和计算后,将战斗结果保存到数据库中。我希望player方法返回在回调中创建的排序数组,但目前它只返回nil class Battle < ActiveRecord::Base after_create do @battlelog = "" @field = [] @conditions = [] @player = sort_

我想在创建时使用一些变量实例化一场战斗,这些变量可以在不访问数据库的情况下进行操作,然后首先在完成所有方法调用和计算后,将战斗结果保存到数据库中。我希望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

我想您正在寻找attr_accessor:player,这是Ruby,更多信息请参见Ruby类,它在模型实例上创建了一个可访问的属性read和write。属性读取器:玩家会给你一个只读属性,如果该属性是由内部操作设置的,则使用该属性。然后,你可以在这场职业战中调用这个玩家作为职业战的一个实例。请记住,如果您调用其他控制器操作或呈现新视图,这些属性通常不会持久存在,除非您有办法永久存储它们。

尝试添加属性可访问:战斗模型中的玩家不这样认为,attr在rails 4中被弃用,并产生一个错误RuntimeError:attr\u accessible从rails提取到gem中。请为paramsstrong_参数使用新的推荐保护模型,或将受保护的_属性添加到GEM文件中以使用旧的保护模型。