gpt4 book ai didi

ruby-on-rails - 使用 acts_as_taggable_on 为模型创建 fixture 数据

转载 作者:行者123 更新时间:2023-11-28 19:48:04 26 4
gpt4 key购买 nike

我正在使用 acts_as_taggable_on为我的 Framework 模型提供标记的插件。我有 Rails 生成的功能测试,以及它使用的固定装置,我想扩展它们以添加一些标签,以便我可以测试按标签搜索等。

我是否必须为 taggingstag 表创建固定装置并将它们加载到我的功能测试的顶部?如果是这样,我该怎么做?我还没有弄清楚 here 中描述的关系的语法.另一种方法是获取 Framework 实例并在测试搜索行为之前向其添加标签吗?或者,如果我这样做,Rails 之神会打败我吗?

最佳答案

我遇到了同样的问题。在我进行了一些反复试验之后,我想出了以下方法,通读了有关固定装置、关联和@barnaclebarnes 对这个问题的回答的文档。

我用 rails 4.2.0acts-as-taggable-on 3.5.0 做到了这一点。

备注:我之前的回答成功了,但有点古怪。在@David 向我指出一种更简洁的方法后,我完全重写了它 - 完全省略了我的反复试验并坚持解决方案。

一种促进更多 rails 车载设施的方法

@barnaclebarnes 解决方案会提供更多的自动化,但也意味着更多的 id 打字和簿记。所以我一直在寻找更简洁的方法。

多态关系

acts_as_taggable_on 使用名为 taggable 的多态关系来实现标签与不​​同模型之间的关系。有关 polymorphic relations 的详细信息,请参阅关于关联的 Rails 指南.

高级 fixture

ActiveRecord::FixtureSet 的 ruby​​doc描述了 ActiveRecord 的工作原理以及它如何处理固定装置的关系(第 关联标签引用 章):

Active Record reflects on the fixture's model class, finds all the belongs_to associations, and allows you to specify a target label for the association [...] rather than a target id for the FK [...].

在页面的下方,还有一些关于多态 belongs_to 的详细信息。

这将允许像这样的标记 fixture 定义:

tagging:
taggable: foo (Klass)
context: tags
tag: bar

命名空间装置和模型

ActiveRecord::TestFixtures提供一种方法来显式设置 fixture 的模型类,以防无法推断。换句话说:您可以使用目录来命名装置并将它们与它们的命名空间模型相匹配。要为 acts_as_taggable_on 的标签和标记加载测试数据,我们可以将它们的 fixture 放在子文件夹 fixtures/acts_as_taggable_on/ 中(备注:fixtures/ActsAsTaggableOn/也可以)

放在一起

# models/item.rb
class Item < ActiveRecord::Base
acts_as_taggable_on
end

# fixtures/items.yml
item_1: {}
item_2: {}

# fixtures/acts_as_taggable_on/tags.yml
tag_1:
name: tag_1
tag_2:
name: tag_2

# fixtures/acts_as_taggable_on/taggings.yml
tagging_1
taggable: item_1 (Item)
context: tags
tag: tag_1

如果您删除 yaml 文件,这允许对可标记模型及其实例进行相当低的维护定义。

关于ruby-on-rails - 使用 acts_as_taggable_on 为模型创建 fixture 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4071205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com