我有一个名为invoices
,invoices
belongs_to :subscription
和subscription
belongs_to :user
的表格。 user
has_many :licenses
。我需要两个查询,其中一个查询获得在特定时间段内创建invoices
的所有licenses
,以便那些licenses
没有特定的viewership_id
。
我能够正确地获得该查询,这是:
Invoice.joins(
subscription: {
user: :licenses
}
).where(
# Other licenses during date range
licenses: {
created_at: date_range
}
).where.not(
licenses: {
viewership_id: Viewership.member.tier(1).first.id
}
)
现在,我需要一个查询来获取在特定时间段内没有创建任何许可证的所有invoices
。像这样的东西(尽管这不起作用):
Invoice.includes(
subscription: {
user: :licenses
}
).where(
licenses: {
user_id: nil,
created_at: date_range # <-- removing this works, but is an incorrect query,
# because the user may have created other
# licenses outside of this date_range and
# that's alright--so querying without the
# date_range means i may miss some users who
# have licenses that just weren't created in
# the date_range
}
)
答案 0 :(得分:0)
可能会帮助你
javax.management.ReflectionException
at sun.management.DiagnosticCommandImpl.invoke(DiagnosticCommandImpl.java:233)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1466)
at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1307)
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1399)
at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:828)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323)
at sun.rmi.transport.Transport$1.run(Transport.java:200)
at sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$240(TCPTransport.java:683)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$$Lambda$1/1241281054.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:276)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:253)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:162)
at com.sun.jmx.remote.internal.PRef.invoke(Unknown Source)
at javax.management.remote.rmi.RMIConnectionImpl_Stub.invoke(Unknown Source)
at javax.management.remote.rmi.RMIConnector$RemoteMBeanServerConnection.invoke(RMIConnector.java:1022)
获取在特定时间段内未创建任何许可证的所有# Create a date range
from_date = 1.months.ago
to_date = Time.now
@invoices = Invoice.joins(subscription: [user: :licenses]).where("licenses.created_at BETWEEN ? AND ? AND licenses.viewership_id !=?", from_date, to_date, Viewership.member.tier(1).first.id)
。
invoices