Будет ли какой-либо уникальный код в любой из моделей репутации?
Если нет, вы можете обойтись с belongs_to :owner, :polymorphic => true
в общей модели репутации.
В противном случае вы сможете обойтись, указав аргумент: class_name в вызовах own_to в каждой подмодели.
Код для модели с одной репутацией:
(Для репутации требуется owner_id: integer и owner_type: строковые столбцы)
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
Репутация подклассов
(Таблице репутации требуется owner_id: integer и тип: строковые столбцы)
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