2013-07-05 72 views
2

我想在Rails 4中實現一些簡單的STI,但還有一些我還無法實現的東西。Rails 4中的單表繼承4

我有以下類別:

class Person < ActiveRecord::Base 
end 

class NaturalPerson < Person 
end 

class LegalPerson < Person 
end 

class Employee < NaturalPerson 
end 

class Customer < NaturalPerson 
end 

的事情是,我有我只想從Employee類訪問一些屬性,有的只是從客戶等,但我找不到辦法。如果我要使用Rails 3的方式,我會用attr_accesible來解決它。但現在這不是可行的,因爲我既不使用attr_accesible寶石,也不願意。

回答

4

我woud在我的控制器使用不同person_params,

def person_params 
params.require(:person).permit(:email, :last_name, :first_name) 
end 

def natural_person_params 
params.require(:person).permit(:email, :job, :location) 
end 

並創建其中I將測試對象的類名或類型屬性,因爲它是一個STI)以確定哪些PARAMS使用的方法。 ..

希望這有助於

乾杯

+0

如果我想在控制器外部建立一個什麼樣的人?這也有可能嗎?我對Rails比較陌生,所以我可能在這裏有一個概念錯誤。謝謝! –

+0

再次閱讀我的評論,我可能不清楚。我的意思是,如果我想在控制器外部處理NaturalPerson的實例,該怎麼辦?我怎樣才能定義只有NaturalPerson的屬性? ActiveRecord處理Person屬性的方式,Person的所有孩子都可以訪問所有屬性。謝謝!!! –

+0

不確定,我沒有在Rails 4中測試STI(只是快速閱讀文檔)。 – phron

3

如果你想使用所有型號的單個控制器,然後把所有的ATTR進入白名單params。

def person_params 
    params.require(:person).permit(:email, :last_name, :first_name, :job, :location) 
end 

如果你想將它們分開,那麼你要爲每種類型的人單獨PARAMS:

def person_params 
    params.require(:person).permit(:email, :last_name, :first_name) 
end 

def employed_person_params 
    params.require(:person).permit(:email, :job, :location) 
end