gpt4 book ai didi

ruby-on-rails - 测试与 alias_attribute 的关联

转载 作者:行者123 更新时间:2023-12-04 21:08:38 26 4
gpt4 key购买 nike

我计划为我的几个模型关联使用别名属性。 注:我完全知道我也可以通过以下方式为这个关联命名:

belongs_to :type, class_name: "AlbumType"

但想进一步探讨 alias_attribute方法。考虑到这一点,我有一个 Album属于 AlbumType .
class Album < ApplicationRecord
alias_attribute :type, :album_type
belongs_to :album_type
end

class AlbumType < ApplicationRecord
has_many :albums
end

到现在为止还挺好。我现在想在我的专辑规范中测试别名关联。看来是传统的 belongs_to即使在指定了类名之后, shoulda-matcher 也不够聪明,无法识别该类型是专辑类型。我当然不反对编写传统的 RSpec 测试,但不确定在这种情况下如何。任何帮助将非常感激。
RSpec.describe Album, type: :model do
describe "ActiveRecord associations" do
it { should belong_to(:album_type) }

context "alias attributes" do
it { should belong_to(:type).class_name("AlbumType") }
end
end
end

最佳答案

我不建议使用 alias_attribute为了这个目的。据我所知,shoulda用途 ActiveRecord::Reflection调查协会。唯一alias_attribute是创建方法来通过 getter、setter 和 '?' 来代理从目标到源的消息。方法。它显然是为了使用 ActiveRecord 属性而不是通用方法。

这样做的效果是alias_attribute不会将这些目标注册为 ActiveRecord 关联和 shoulda 的当前实现将无法捕获他们。

这种模式也有副作用。您可能知道,当您创建关联时,ActiveRecord 还会创建辅助方法来让您的生活更轻松。例如,belongs_to还创建:

build_association(attributes = {})
create_association(attributes = {})
create_association!(attributes = {})

通过您的示例,使用 alias_attribute不会给你 album.build_album_type这是其他贡献者可能愿意依赖的东西,因为他们希望这是默认行为。

处理此问题的最佳方法正是您告诉您不想做的事情,使用 belongs_to方法以您真正想要的名称创建关联。

关于ruby-on-rails - 测试与 alias_attribute 的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39823445/

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