2016-06-01 60 views
0

我在Rails中創建了一個SQL視圖,使用優秀的Schema Plus Views gem。Rails primary_key沒有繼承

爲了幹掉我的SQL視圖模型,我爲所有SQL視圖模型創建了一個超類。

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

然後我繼承SQL視圖

class ChallengeView < SqlView 

end 

問題是self.primary_key不被繼承。

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: .... 

編輯

根據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