我的模型Client
has_many :analytics
和Analytic
belongs_to :client
。我在分析模型中编写了一个方法来为给定的客户端更新自己,并且基本上想要调用Client.find(xx).analytics.update_analytics(arg1, arg2,..)
Analytic.rb
中的代码如下所示:
def self.update_analytics(arg1, arg2, ...)
client = self.client
//go_get_some_data
client.analytics.create(...)
end
self.client
错误undefined method
和self.parent
只返回Object
,但我无法从父级调用self.parent.id
或其他属性。
如何获取调用Client
方法的analytics.update_analytics
实例?
答案 0 :(得分:0)
以self为前缀的方法是一个类方法,您需要在Analytic模型中使用实例方法
def update_analytics
self.client # this should already be set or you would never be able to loop through a client's analytics. when creating analytics you should be assigning the client_id prior to calling this method or it would never work
end
此外,您需要遍历属于客户端的所有分析并在每个对象上调用update_analytics方法
@client = Client.find(xx)
@client.analytics.each do |analytic|
analytic.update_analytics(arg1, arg2,..)
end
答案 1 :(得分:0)
致电时
do.call(rbind, strsplit(df$Time, "\\s(?=\\d)", perl = T))
# [,1] [,2]
# [1,] "Week End" "07-01-10"
# [2,] "Week End" "07-02-10"
在幕后它将是:
Client.find(xx).analytics
其实这一行:
SELECT * FROM clients WHERE id = xx
SELECT * FROM analytics WHERE client_id = xx
无效,因为 Client.find(xx).analytics.update_analytics(arg1, arg2,..)
会返回分析数组。所以你必须迭代它们并调用一些方法。
答案 2 :(得分:0)
如果方法以self.
开头,则它是一个Class方法,因此必须在类本身上调用。
例如
Analytics.update_analytics(arg1, arg2,...)
但我确定这不是你想要做的。
但Client.find(xx).analytics
将返回一个数组。因此,您的类方法self.update_analytics
无法在Client.find(xx).analytics
上运行(它将返回一个数组)。
根据您对第一个答案的评论,您只想获取新数据,并更新客户端实例。我想你可以通过将它作为模块或服务来实现,并将Client实例作为第一个参数,然后将其他参数作为其他参数。 这不是一个确切的答案,但它可能会让您了解如何解决您的问题。