首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby on Rails:多态关联混淆

问Ruby on Rails:多态关联混淆
EN

Stack Overflow用户
提问于 2016-03-31 11:34:40
回答 1查看 99关注 0票数 0

我在GitHub上贡献了一个ruby on rails应用程序,在那里我遇到了以下场景:

我有以下模型,我想转换成多态的:

代码语言:javascript
复制
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表中。

rails指南中所述的模型修改:

代码语言:javascript
复制
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

虽然我将它与默认作用域一起使用,但它不允许我与默认作用域一起使用,并给出了以下行的错误:

代码语言:javascript
复制
has_many :comments, as: :commentable, -> { order('created_at DESC') }, dependent: :destroy

我对以下模型的更改感到困惑:

代码语言:javascript
复制
class User < ActiveRecord::Base
end

class Application < ActiveRecord::Base
end

我是否需要在User和Application模型中进行以下更改?

代码语言:javascript
复制
class User < ActiveRecord::Base
  has_many :comments, as: :commentable
end

class Application < ActiveRecord::Base
  has_many :comments, as: :commentable
end

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2016-03-31 12:25:12

如果您的用户/应用程序对象需要注释,则添加

代码语言:javascript
复制
class User < ActiveRecord::Base
  has_many :comments, as: :commentable
end

class Application < ActiveRecord::Base
  has_many :comments, as: :commentable
end

否则create belongs_to/has_many关系不是多态的,例如。

代码语言:javascript
复制
class User < ActiveRecord::Base
  has_many :comments
end

class Application < ActiveRecord::Base
  has_many :comments
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36323664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档