2016-06-01 15 views
0

私はRailsで優れたSchema Plus Views gemを使用してSQLビューを作成しました。Rails primary_key継承されない

SQLビューモデルをDRYするために、すべてのSQLビューモデルのスーパークラスを作成しました。

class SqlView < ActiveRecord::Base 
    self.abstract_class = true 
    self.primary_key = :id 
    after_initialize :readonly! 
end 

それから私はこの問題は、self.primary_keyが継承されていないです

class ChallengeView < SqlView 

end 

SQLビューを継承します。

irb(main):008:0> c = ChallengeView.find(1) 
ActiveRecord::UnknownPrimaryKey: Unknown primary key for table challenge_views in model ChallengeView. 

モデルに追加しても問題ありません。

class ChallengeView < SqlView 
    self.primary_key = :id 
end 


irb(main):001:0> c = ChallengeView.find(1) 
    ChallengeView Load (2.7ms) SELECT "challenge_views".* FROM "challenge_views" WHERE "challenge_views"."id" = $1 LIMIT 1 [["id", 1]] 
=> #<ChallengeView id: 1, organizer_id: 1, challenge: .... 

EDIT

は、Railsのドキュメントによれば、オーバーライドすることができます。なぜ、モジュールとしての構成を含まない

http://api.rubyonrails.org/classes/ActiveRecord/AttributeMethods/PrimaryKey/ClassMethods.html

答えて

2

module SqlView 
    def included(base) 
    base.module_eval do 
     self.abstract_class = true 
     self.primary_key = :id 
     after_initialize :readonly! 
    end 
    end 
end 

class ChallengeView < ActiveRecord::Base 
    include SqlView 
end 
+0

素晴らしいアイデア。ありがとう! – Fuser97381

関連する問題