【发布时间】:2020-05-31 05:00:29
【问题描述】:
我在我的 Rails 应用程序中使用 KSUIDs 作为 UUID 的替代品。 michaelherold/ksuid-ruby 将 KSUID 移植到 Ruby 并将它们实现为 ::ActiveRecord::Type::String。使用has_many :through associations 和class_name 时,除了一个小错误之外,一切都运行良好。
我能够创建两个 rspec 测试来演示该错误。
工作测试
# code excerpt from link above
class Patient < ActiveRecord::Base
act_as_ksuid :id
has_many :appointments
has_many :physicians, through: :appointments
end
bundle exec rspec ./spec/cast1_spec.rb # works as expected, tests pass
测试失败
当我将患者的预约关联更新为使用class_name 时,将导致TypeError: can't cast KSUID::Type。
# code excerpt from link above
class Patient < ActiveRecord::Base
act_as_ksuid :id
has_many :foobar, class_name: "Appointment" # <---- using class_name here
has_many :physicians, through: :foobar
end
bundle exec rspec ./spec/cast2_spec.rb # test fails
TypeError:
can't cast KSUID::Type
# ./spec/cast2_spec.rb:59:in `block (2 levels) in <top (required)>'
您能帮我找出问题并修复测试吗?重现自己运行:
git clone https://github.com/mattes/ksuid-ruby.git
cd ksuid-ruby
git checkout cast_error
bundle install
bundle exec rspec ./spec/cast1_spec.rb # works
bundle exec rspec ./spec/cast2_spec.rb # fails
【问题讨论】:
-
请在链接到您的 github 存储库时使用永久链接,以防止链接失效。您可以通过右键单击任何代码行并选择“复制永久链接”来获取永久链接。如果可能的话,您还应该包含足够的有问题的代码来重现问题。
-
我将代码放在我不打算更改的分支中。我已经尝试尽可能地简化它。我不认为在这种特殊情况下包含更多代码会有所帮助。
-
是的,但如果这些链接被破坏,它确实可以防止问题在未来变得完全无用。
-
已更新永久链接
标签: ruby-on-rails ruby has-many-through ruby-on-rails-6 ksuid