對於返回模型或模型集合的模型方法,這些方法應該只返回與它們所在類相對應的類型的模型嗎?例如,如果我有一個Theater模型,它的方法是否應該總是返回類型爲Theater的模型,或者它是否有意義返回類型爲Showtime的模型(例如,Theater.get_showtimes(theater_id)與Showtimes.get_by_theater_id (theater_id))。模型方法應該總是返回自己類型的模型嗎?
回答
如果您的Theater
has_many
Showtimes
,那麼您可以通過Theater.Showtimes
訪問它。
我問自己這個問題幾乎每次遇到像你一樣的情況。我個人試圖堅持一個返回自己類型的模型。所以在那種情況下,我會去Showtimes.get_by_theater_id(theater_id)
。當我稍後查看代碼時,這會更有意義。
簡答:沒有。
模型只是一個ruby類文件,它代表數據庫中的某個表,並且僅用於ruby-on-rails世界。模型不會返回任何東西,它只是一個容器。一個模型具有返回數據的方法/函數,決不是隻返回相同的模型對象。
例如(僞代碼):
class Dog < AR:B
def hack_the_world
//do hacking and return array of passwords
//...
end
end
我們這裏有一個狗模型。比如我們從這些軌方法,返回狗對象:
dogs=Dog.all
dog=Dog.find(1)
dog=Dog.where(:name => 'fido')
但是,我們可以調用我們的方法不返回任何對象的狗
passwords=Dog.new.hack_the_world
不會混淆。我已更新措辭爲:「應該*其方法*總是返回」 –
一對夫婦的更多的ActiveRecord式的方式實施你的例子(Theater.get_showtimes(theater_id)
)將是:
Theater.find(theater_id).showtimes
改爲。這假設您已經使用ActiveRecord關聯作爲zsalzbank提及。Showtimes.find_by_theater_id(theater_id)
我建議你使用ActiveRecord的力量爲它做什麼最好的,而不用擔心人爲地限制自己的方法可能會返回什麼課。
現在,如果我們純粹是在談論理論,我會主張遵循您使用的語言和/或框架的約定。
看着ActiveRecord::Base
(http://apidock.com/rails/ActiveRecord/Base)找到一堆返回非ActiveRecord::Base
的類方法是很簡單的。例如,ActiveRecord::Base.connection
返回ActiveRecord::ConnectionAdapters::AbstractAdapter
的子類,ActiveRecord::Base.table_name
返回String
。顯然,你的模型也有這些方法,因此它返回這些值。
我不認爲將建議的限制放在自己/你的代碼上會有什麼好處 - 尤其是因爲你已經違反了從ActiveRecord::Base
繼承的規則,並且不得不處理不同的返回類。
是的,但我在這裏講理論。我的例子並不是最好的,但我相信可能會出現某種情況,即給定方法是否屬於給定模型。 –
更新的答案與一些有關該理論的看法。 雖然我認爲我們可能會在這個討論中超出堆棧溢出範圍嗎? –
你會在哪裏推薦這個討論發生? –
- 1. 泛型類方法返回了自己的類型作爲模板參數
- 2. 總是返回自己的類型/「類型X不能分配鍵入此類型的打字稿方法」
- 3. 推導返回類型爲模板參數方法的類型
- 4. 模板類方法的正確簽名返回它自己的類型
- 5. iOS:方法返回類型應該是X類的子類
- 6. 什麼樣的方法應該是模型類的方法?
- 7. Rails模型:包含自己的方法
- 8. Rails 4模型返回總是零
- 9. JS總是返回一個空模型
- 10. Android靜態模型總是返回null
- 11. JavaFx模型等於總是返回false
- 12. 一些關係表應該有自己的模型嗎?
- 13. 返回的類型應該是entityManager symfony
- 14. 返回的EF模型類
- 15. 分配模型方法的返回值模型屬性
- 16. mvc 4模型,方法總是返回0?
- 17. Django模型:參考字段返回多種類型的模型
- 18. 模型包含它自己的模型類型列表(遞歸建模?)
- 19. 以下方法的返回類型應該是什麼?
- 20. WEB API操作方法的返回類型應該是什麼?
- 21. Codeigniter返回類型從模型
- 22. 在RoR應用程序中投票應該是自己的模型嗎?
- 23. 返回類型應該是什麼?
- 24. Ajax get方法返回空的模型
- 25. 返回模板類型
- 26. 自定義返回類型的方法?
- 27. C++,返回類型爲模板類型的模板
- 28. 我應該單元測試DefaultModelBinder返回的模型嗎?
- 29. 模型的泛型超類應該是靜態還是單態?
- 30. 模型應該保持對其他模型的引用嗎?
沒錯,但我在這裏講理論。 –