我正在尝试创建一个矢量来跟踪游戏中的敌人,这些游戏将拥有一堆可变结构.我有一个世界结构,其敌人作为其成员如下:
pub struct World {
pub player : Creature,
pub enemies : Vec<Creature>,
}
Run Code Online (Sandbox Code Playgroud)
我按如下方式创建敌人矢量:
let mut enemies = vec![];
let mut enemy = Creature::new(5, 5, map_start_x+5, map_start_y+5, "$", 10, 1, "")
enemies.push(enemy);
Run Code Online (Sandbox Code Playgroud)
后来我在代码中拔出一个敌人enemies进行攻击并尝试更新hp,如下所示:
for enemy in self.enemies.iter() {
if new_x == enemy.x && new_y == enemy.y {
enemy.hp -= self.player.damage;
return;
}
}
Run Code Online (Sandbox Code Playgroud)
这是问题发生的地方,因为此时敌人显然不可变
error: cannot assign to immutable field `enemy.hp`
Run Code Online (Sandbox Code Playgroud) 现在我有以下代码:
search = Tire.search ['object1_index', 'object2_index'] do |search|
search.query { string params[:q] }
end
@results = search.results
Run Code Online (Sandbox Code Playgroud)
现在的结果都来自object1,但是,如果我使用相同的查询删除'object1_index',我会得到object2结果.如何让我的搜索同时与两个索引进行交互?
编辑:
我现在有以下(使用我在模型上定义的搜索),但由于我最终将添加分页,我不确定这是否是最好的解决方法:
object1_results = Object1.search(params).results
object2_results = Object2.search(params).results
@results = object1_results + object2_results
@results.sort!(&:_score)
Run Code Online (Sandbox Code Playgroud) 我目前在模型上使用acts_as_paranoid 和Friendly_id (5.0.1),当我销毁模型并尝试创建一个新模型来生成相同的slug时,我得到:
ERROR: duplicate key value violates unique constraint "index_papers_on_slug"
Run Code Online (Sandbox Code Playgroud)
我需要以某种方式获取代码来检查所有对象的范围内是否已存在 slug,而不仅仅是未删除的对象。
with_deleted在检查 slug 是否已存在时,如何获取要使用的Friendly_id 。我应该指出,我还使用了 slug 历史记录,这可能会使事情进一步复杂化。
深入挖掘后,我意识到,由于我使用的是历史记录,因此 slug 已被完全删除,而对象只是被软删除:
DELETE FROM "friendly_id_slugs" WHERE "friendly_id_slugs"."id" = $1 [["id", 9423]]
Run Code Online (Sandbox Code Playgroud)
所以,我只需要弄清楚如何防止这种情况,我应该没问题,因为看起来unscoped在尝试查找有效的 slug 时,Friendly_id 代码本身已经在使用了。