Ruby on rails 模型方法是否应该总是返回自己类型的模型?

Ruby on rails 模型方法是否应该总是返回自己类型的模型?,ruby-on-rails,activerecord,model,Ruby On Rails,Activerecord,Model,对于返回模型或模型集合的模型方法,这些方法是否应该只返回与它们所在的类对应的类型的模型 例如,如果我有一个剧院模型,它的方法应该总是返回剧院类型的模型,还是返回Showtime类型的模型是有意义的(例如,Theater.get_showtimes(Theater_id)vs.showtimes.get_by_Theater_id(Theater_id))。如果你的剧院有很多的showtimes,如果你的剧院有很多演出时间,那么你可以通过剧院来访问它。我个人试图坚持一个返回自己类型的模型。所以在这

对于返回模型或模型集合的模型方法,这些方法是否应该只返回与它们所在的类对应的类型的模型


例如,如果我有一个剧院模型,它的方法应该总是返回剧院类型的模型,还是返回Showtime类型的模型是有意义的(例如,Theater.get_showtimes(Theater_id)vs.showtimes.get_by_Theater_id(Theater_id))。

如果你的
剧院
有很多
的showtimes
,如果你的
剧院有很多
演出时间,那么你可以通过
剧院来访问它。我个人试图坚持一个返回自己类型的模型。所以在这种情况下,我会选择Showtimes.get\u by\u theater\u id(theater\u id)
。当我以后看代码时,它就更有意义了。

我几乎每次遇到像你这样的情况时都会问自己这个问题。我个人试图坚持一个返回自己类型的模型。所以在这种情况下,我会选择Showtimes.get\u by\u theater\u id(theater\u id)
。当我稍后查看代码时,它才更有意义。

简短回答:不

模型只是一个表示数据库中某个表的ruby类文件,实际上只在RubyonRails世界中使用。模型不会返回任何东西,它只是一个容器。一个模型有返回数据的方法/函数,它们绝不必须只返回同一个模型对象

例如(伪代码):

但是我们可以调用不返回任何Dog对象的方法

passwords=Dog.new.hack_the_world
简短回答:没有

模型只是一个表示数据库中某个表的ruby类文件,实际上只在RubyonRails世界中使用。模型不会返回任何东西,它只是一个容器。一个模型有返回数据的方法/函数,它们绝不必须只返回同一个模型对象

例如(伪代码):

但是我们可以调用不返回任何Dog对象的方法

passwords=Dog.new.hack_the_world

实现示例(
Theater.get\u showtimes(Theater\u id)
)的两种更具ActiveRecord风格的方法是:

  • 剧院。查找(剧院id)。改为放映时间。这假设您使用了zsalzbank提到的ActiveRecord关联
  • Showtimes.通过剧院id(剧院id)查找剧院
我建议您使用ActiveRecord的强大功能来实现它的最佳功能,不要担心人为地将自己限制在类方法可能返回的范围内

现在,如果我们谈论的是纯粹的理论,我会主张遵循您使用的语言和/或框架的约定

查看
ActiveRecord::Base
(http://apidock.com/rails/ActiveRecord/Base)找到一堆返回的不是
ActiveRecord::Base
的类方法很简单。例如,
ActiveRecord::Base.connection
返回
ActiveRecord::ConnectionAdapters::AbstractAdapter
的子类,而
ActiveRecord::Base.table_name
返回
字符串。显然,您的模型也有这些方法,因此它会返回这些值


我看不出对您自己/您的代码施加建议的限制有任何好处,特别是因为您已经通过继承
ActiveRecord::Base
打破了规则,并且无论如何都必须处理不同的返回类。

实现示例的两种更为ActiveRecord风格的方法(
Theater.get\u showtimes(剧院id)
)将是:

  • Theater.find(Theater_id).showtimes
    。这假设您使用了zsalzbank提到的ActiveRecord关联
  • Showtimes.通过剧院id(剧院id)查找剧院
我建议您使用ActiveRecord的强大功能来实现它的最佳功能,不要担心人为地将自己限制在类方法可能返回的范围内

现在,如果我们谈论的是纯粹的理论,我会主张遵循您使用的语言和/或框架的约定

查看
ActiveRecord::Base
(http://apidock.com/rails/ActiveRecord/Base)找到一堆返回的不是
ActiveRecord::Base
的类方法很简单。例如,
ActiveRecord::Base.connection
返回
ActiveRecord::ConnectionAdapters::AbstractAdapter
ActiveRecord::Base.table\u name
的子类。显然,您的模型h与这些方法一样,它也会返回这些值


我看不出对你自己/你的代码施加建议的限制有任何好处,特别是因为你已经打破了规则,继承了
ActiveRecord::Base
,并且无论如何都要处理不同的返回类。

对,但我在这里讲的是理论。对,但我在这里讲的是理论。不要混淆。我已经更新了措辞应该是:“它的方法是否应该始终返回”不要混淆。我已经将措辞更新为:“它的方法是否应该始终返回”是的,但我在这里讲的是理论。我的例子不是最好的,但我相信在某些情况下,给定方法是否属于给定模型的问题可能会出现。更新了答案,并对理论提出了一些意见。虽然我认为我们可能已经超出了堆栈溢出的范围,但这次讨论会导致什么情况发生?您会重新考虑M这场讨论发生了吗?也许我不知道。在我看来,这个问题“可能会征求意见、辩论、争论、投票或扩大讨论”.我不太在乎,只是说你在其他地方可能会有更好的运气。是的,但我在这里讲的是理论。我的例子不是最好的,但我相信在某些情况下,可能会有一个给定方法是否适用的问题
passwords=Dog.new.hack_the_world