我有一个有用户和乔布斯的招聘系统。
它们之间存在着一种has_many关系:通过潜能。
这将使管理员能够从本质上了解用户很可能适合某项工作。
要做到这一点,我有一个after_create和一个after_save事件,像这样--
class User < ActiveRecord::Base
after_create :create_potentials
after_save :set_potentials
private
def create_potentials
Job.all.each do | job |
potential = Potential.new
potential.job_id = job.id
potential.user_id = self.id
potential.save!
end
end
def set_potentials
self.potentials.each do |potential|
potential.level = potential.find_potential
potential.save!
end
end
不过,这让我很担心。首先,我使用整个模型只是为了一个属性,“潜力”,这似乎有点古怪。
第二个问题是,在创建用户之后,我将为所有的工作创造潜力。
目前,这些工作相对较少(即30岁以下),但这是许多潜在的计算任务。
after_create和after_save事件能异步运行吗?
发布于 2014-01-27 21:01:48
发布于 2014-01-27 22:14:29
根据你的Qsn,for every new user created. Entries are made into potential table for each job id along with the user_id.
和
要更新用户条目,potential level is being updated for all the potential table entries for that user which equals total no of jobs present.
如果您正在为用户寻找实时更新,那么您需要跳过cron部分并实现逻辑以减少查询的no。如果这不是一个限制,那么建议使用cron作业来处理它,使用redis/resque来处理after_create和after_save任务。当任何用户创建或更新任务时,这些作业将由正在运行的redis服务器处理。
正如doctororange在回答中所建议的那样,如果您希望定期处理任务,而不管对用户表的任何更改,也可以查看延迟作业。
https://stackoverflow.com/questions/21397091
复制相似问题