【发布时间】:2016-07-06 22:00:42
【问题描述】:
我想在我的项目中建立多态关联,所以我按照 Rails 指南去做,但我得到了:NameError: uninitialized constant DashboardAssignment::Assignable
错误。
型号:
仪表板分配:
class DashboardAssignment < ActiveRecord::Base
belongs_to :dashboard
belongs_to :assignable, polymorphic: true
validates :dashboard, presence: true
validates :assignable, presence: true, uniqueness: { :scope => :dashboard }
end
用户:
class User < ActiveRecord::Base
has_many :dashboard_assignments, as: :assignable
has_many :dashboards, through: :dashboard_assignments
end
组:
class Group < ActiveRecord::Base
has_one :dashboard_assignment, as: :assignable
has_many :laboratories_assignments, as: :lab_assignable
end
仪表板:
class Dashboard < ActiveRecord::Base
has_one :building
has_many :dashboard_assignments
has_many :users, through: :dashboard_assignments, as: :assignable
end
在 DashboardAssignment Migration 文件中我有:
t.references :assignable, null: false, polymorphic: true, index: true
当我尝试通过 DashboardAssignment.create(assignable: u) 创建新的 DashboardAssignment 时,u = User.find(1)
它给了我错误:
NameError: uninitialized constant DashboardAssignment::Assignable
from P:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/activerecord-4.2.6/lib/active_record/inheritance.rb:158:in `compute_type' ...
我做错了吗?
我的 rails 版本是 4.2.6
【问题讨论】:
-
错误告诉您的是,在 DashboardAssignment 类上没有称为可分配的属性或关联。能否请您发布您的仪表板模型?
-
好的。添加仪表板模型
-
我很确定,你的问题存在是因为:has_many :users, through: :dashboard_assignments, as: :assignable
-
我觉得这个可以帮到你:stackoverflow.com/questions/5886738/…
-
尝试使用 source: 而不是 as: 还是一样
标签: ruby-on-rails ruby ruby-on-rails-4 model polymorphic-associations