Ruby on rails RubyonRails:使用单表继承创建模型?
我的系统中有两种型号:Ruby on rails RubyonRails:使用单表继承创建模型?,ruby-on-rails,sti,Ruby On Rails,Sti,我的系统中有两种型号: 用户信誉 后声誉 响应声誉 (与此类似) 因此,他们共享一些基本代码: 递增和递减值 属于声誉所代表的三个对象(用户、帖子、响应)的唯一\u id 如果有C++,我会有一个超类叫做“信誉>代码>,这些概念将封装这些概念。 目前,我有三个模型,分别定义,但当我构建系统时,我开始意识到有很多代码重复,等等 如果我要使用STI,那么我必须创建一个owner\u id字段,该字段将是对象id和owner\u类型 那个么,处理这个案件的最佳方式是什么 在任何声誉模型中都会有
- 用户信誉
- 后声誉
- 响应声誉
- 递增和递减值
- 属于声誉所代表的三个对象(用户、帖子、响应)的唯一\u id
如果有C++,我会有一个超类叫做“<代码>信誉>代码>,这些概念将封装这些概念。 目前,我有三个模型,分别定义,但当我构建系统时,我开始意识到有很多代码重复,等等
如果我要使用STI,那么我必须创建一个owner\u id
字段,该字段将是对象id和owner\u类型
那个么,处理这个案件的最佳方式是什么 在任何声誉模型中都会有唯一的代码吗 如果没有,您可以在通用声誉模型中使用
属于:所有者,:多态=>true
否则,您应该能够在每个子模型中的“属于”调用中提供:class\u name参数
单一声誉模型的代码:
(信誉需要所有者标识:整数和所有者类型:字符串列)
class声誉true
...
结束
类用户:所有者
结束
类Post:所有者
结束
类响应:所有者
结束
子类化声誉
(信誉表需要所有者标识:整数和类型:字符串列)
class声誉“User”
...
结束
班级后声誉<声誉
属于_to:owner,:class_name=>“Post”
...
结束
类响应计算<声誉
属于\u to:owner,:class\u name=>“响应”
...
结束
类用户:所有者id
...
结束
类Post:owner\u id
...
结束
类响应:owner\u id
...
结束
请不要标记垃圾邮件。你的问题只与RubyonRails有关。
class Reputation < ActiveRecord::Base
belongs_to :owner, :polymorphic => true
...
end
class User < ActiveRecord::Base
has_one :reputation, :as => :owner
end
class Post < ActiveRecord::Base
has_one :reputation, :as => :owner
end
class Response < ActiveRecord::Base
has_one :reputation, :as => :owner
end
class Reputation < ActiveRecord::Base
...
end
class UserReputation < Reputation
belongs_to :owner, :class_name => "User"
...
end
class PostReputation < Reputation
belongs_to :owner, :class_name => "Post"
...
end
class ResponseReputation < Reputation
belongs_to :owner, :class_name => "Response"
...
end
class User < ActiveRecord::Base
has_one :user_reputation, :foreign_key => :owner_id
...
end
class Post < ActiveRecord::Base
has_one :post_reputation, :foreign_key => :owner_id
...
end
class Response < ActiveRecord::Base
has_one :response_reputation, :foreign_key => :owner_id
...
end