我正在尝试使用jsonapi-resources
Rails 5 中的 gem 设置多态关联。
我有一个User
模型,它有一个名为 的多态关联profile
,它的类型可以是Inspector
或Buyer
。以下是截断的模型:
class User < ApplicationRecord
belongs_to :profile, polymorphic: true
end
class Inspector < ApplicationRecord
belongs_to :user
end
class Buyer < ApplicationRecord
belongs_to :user
end
在users
表中,有对应的profile_id
和profile_type
字段来表示与 和 的多态inspectors
关联buyers
。这一切都在我们当前的 Rails 设置中按预期工作,但是当我尝试使用jsonapi-resources
.
现在对应的jsonapi-resources
资源和控制器(根据指示):
class Api::V1::Mobile::UserResource < JSONAPI::Resource
immutable
attributes :name, :email
has_one :profile, polymorphic: true
end
class Api::V1::Mobile::ProfileResource < JSONAPI::Resource
end
class Api::V1::Mobile::ProfilesController < Api::V1::Mobile::BaseController
end
据我所知,现在应该正确设置所有内容,但是在到达端点时出现以下错误:
"exception": "undefined method `collect' for nil:NilClass",
"backtrace": [
".rvm/gems/ruby-2.6.5/gems/jsonapi-resources-0.10.2/lib/jsonapi/relationship.rb:77:in `resource_types'",
当深入relationship.rb
研究堆栈跟踪中提到的内容时,它看起来无法解析多态类型,所以我尝试了以下方法:
class Api::V1::Mobile::UserResource < JSONAPI::Resource
immutable
attributes :name, :email
has_one :profile, polymorphic: true, polymorphic_types: ['inspector', 'buyer']
end
但是,唉,另一个错误:Can't join 'User' to association named 'inspector'; perhaps you misspelled it?
在此先感谢您提供有关此设置的任何帮助!