2014-01-10 80 views
3

作爲Rails的新手,我一直運行到一個難以調試的問題:使用Rails的保留字(如:連接)的模型或列名...過濾出欄杆保留字?

另外,有時我跳過我的第一選擇的列名稱(如:日期),因爲我不確定是否允許,我寧願安全。

是否有一個寶石,或者我可以添加到自定義導軌生成器,自動檢查這些並警告我?

我已經找到了這些名字的四年的名單,但更有用的是我可以做modelA.methods & modelB.methods獲得保留字列表。我不確定這是多麼的全面 - 是嗎?

回答

2

Rails保留字列表的一個問題是應用程序在不同範圍內運行的不同部分。某些控制器操作可能沒問題的名稱不適合作爲模型列,反之亦然。此外,鑑於寶石傾向於將各種代碼混合到您的應用程序中,靜態保留字列表對您來說不會有多大用處。

如果發電機檢查了這一點,但他們今天不會,這很好,因爲發電機的運行方式與控制器/模型本身的運行環境完全相同(即混入所有相同的寶石)。再加上有些人在一段時間後從發電機上移開,一旦他們得到了模式的縈繞,所以最好能爲非發電機世界找到答案。

我會建議一個替代策略。當你在質疑一個特定的方法名或列名是否是一個好主意,只是要求的應用程序的一部分,如果已經使用它,使用respond_to?instance_methods.include?

ActionController::Base.instance_methods.include? :display 
=> true 
# display is a bad action name 

或使用您的實際控制人:

MyController.new.respond_to? :display 

車型:

ActiveRecord::Base.instance_methods.include? :status 
=> false 
# status is an okay column name 

MyModel.new.respond_to? :status 
2

以下是可供選擇的幫助 - http://reservedwords.herokuapp.com/。這個問題是棘手的,因爲@sampierson上面提到 - 他的方法也應該工作。通過反覆試驗,在發生足夠的衝突後,您應該覆蓋大部分案例