识字粗堪供赋役,不须辛苦慕公卿。这篇文章主要讲述ApplicationRecord:访问范围内的模型父级相关的知识,希望能为你提供帮助。
【ApplicationRecord(访问范围内的模型父级)】我在理解范围以及何时可以在Rails模型中访问某些变量时遇到一些麻烦。我试图访问EventInstance的父级,以确定它是否发生在某个时间范围内。
class EventInstance <
ApplicationRecord
belongs_to :event# Event starts between 12am and 10am
scope :morning, ->
{ where(start_time: (event.start_time.midnight...event.start_time.change(hour: 10)) ) }def event_name
# This works
event.name
endend
请原谅我的无知,因为我没有完全掌握Rails的魔力。为什么我可以在
event
中访问event_name
,但不在范围内?有没有办法做到这一点?答案根据docs,定义范围“与定义类方法完全相同”。你可以通过这样做完成同样的事情:
class EventInstance <
ApplicationRecord
belongs_to :event# Event starts between 12am and 10am
def self.morning
where(start_time: (event.start_time.midnight...event.start_time.change(hour: 10)) )
enddef event_name
# This works
event.name
endend
甚至:
class EventInstance <
ApplicationRecord
belongs_to :eventclass <
<
self # Event starts between 12am and 10am
def morning
where(start_time: (event.start_time.midnight...event.start_time.change(hour: 10)) )
endenddef event_name
# This works
event.name
endend
在所有这些情况下,你不能在
EventInstance
的实例上调用该方法,因为它是一个实例而不是一个类。我想你可以这样做:
class EventInstance <
ApplicationRecord
belongs_to :eventdelegate :start_time, to: :event# Event starts between 12am and 10am
def in_morning?
start_time.in?(start_time.midnight...start_time.change(hour: 10))
enddef event_name
# This works
event.name
endend
确定
EventInstance
的实例是否发生在上午12点到10点之间。我还要注意到J?rg W Mittag希望说:
我是Ruby Purists之一,他们喜欢指出Ruby中没有类方法。但是,我完全没问题,通俗地使用术语类方法,只要所有各方都完全理解它是口语用法。换句话说,如果你知道没有类方法这样的东西,并且术语“类方法”只是“作为让所有各方充分理解术语类方法在其口语意义上的使用。Class
实例的对象的单例类的实例方法”的缩写,那么就有了没问题。但除此之外,我只看到它阻碍理解。
推荐阅读
- 在Electron中打包的Angular app中运行shell脚本
- 无法在Rails 5.0中的ApplicationHelper方法中使用“number_with_precision”
- 在Android Nougat中使用自签名证书通过https连接时的SSL握手异常
- 无声安装PFX到Android系统可信CA用户密钥库
- 在Glassfish Application Server中导入SSL证书
- 改进HTTPS连接无法在Android中运行
- Android(自动选择调试/发布Maps v2 api密钥())
- 用于过滤用例的AppSync DynamoDB解析器
- 将App Engine URL分派给Compute Engine实例