Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails:使用单表继承创建模型?_Ruby On Rails_Sti - Fatal编程技术网

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