对于返回模型或模型集合的模型方法,这些方法应该只返回与它们所在类相对应的类型的模型吗?例如,如果我有一个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. 模型应该保持对其他模型的引用吗?
没错,但我在这里讲理论。 –