我在GitHub上贡献了一个ruby on rails应用程序,我遇到了以下情况:
我有以下模型,我想转换为多态:
class Comment < ActiveRecord::Base
belongs_to :team
belongs_to :user
belongs_to :application
belongs_to :project
end
class Team < ActiveRecord::Base
has_many :comments
end
class Project < ActiveRecord::Base
has_many :comments, -> { order('created_at DESC') }, dependent: :destroy
end
class User < ActiveRecord::Base
end
class Application < Rails::Application
end
我进行了以下更改以使其具有多态性:
执行数据库更改以删除team_id
,project_id
,application_id
和user_id
,并将commentable_id
和commentable_type
添加到comments
表
在导轨指南中描述的模型中的修改:
class Comment < ActiveRecord::Base
belongs_to :commentable, polymorphic: true
end
class Team < ActiveRecord::Base
has_many :comments, as: :commentable
end
class Project < ActiveRecord::Base
has_many :comments, as: :commentable, -> { order('created_at DESC') }, dependent: :destroy
end
虽然我在默认范围内使用它,但它不允许我使用默认范围并在下面的行中给出错误:
has_many :comments, as: :commentable, -> { order('created_at DESC') }, dependent: :destroy
我很难改变以下模型:
class User < ActiveRecord::Base
end
class Application < ActiveRecord::Base
end
我是否需要在User
和Application
型号中进行以下更改?
class User < ActiveRecord::Base
has_many :comments, as: :commentable
end
class Application < ActiveRecord::Base
has_many :comments, as: :commentable
end
提前致谢!
答案 0 :(得分:0)
如果您的用户/应用程序对象需要注释,则添加
class User < ActiveRecord::Base
has_many :comments, as: :commentable
end
class Application < ActiveRecord::Base
has_many :comments, as: :commentable
end
否则创建belongs_to / has_many关系不是多态的 例如
class User < ActiveRecord::Base
has_many :comments
end
class Application < ActiveRecord::Base
has_many :comments
end