if j.job_type_name
j.type = j.job_type_name
elsif j.type.length > 1
# jty = Jobtype.find_by_id(j.type)
# We don't want to relentlessly hit the db for JobTypes, Colors, Priorities, etc. so we use the stored 'all' variable
jty = allJobTypes.find { |h| h['_id'] == BSON::ObjectId(j.type) }
j.type = jty && jty.job_type ? jty.job_type : 'N/A'
end
if j.priority_name
j.priority = j.priority_name
elsif j.priority
pri = Jobpriority.find_by_id(j.priority)
j.priority = !pri.blank? && !pri.job_priority.blank? ? pri.job_priority : 'N/A'
end
我有两个if else块,我认为它们作为Procs更好,但我仍然围绕Proc是什么。它只是我想要经常调用的一段代码,放在一个地方,这样我只需要在那个地方更新它。它不是一个对象本身的方法,而只是一些重复的代码。
那么上面的语法是什么?
您没有看到的代码(设置'j'的地方)是数据库游标上的.each循环。
所以Job.where(stuff).each do |j|
等
答案 0 :(得分:3)
制作proc的语法只是:
my_proc = proc do |arglist|
# code here
end
如果需要,您还可以使用Proc.new
代替proc
。
你应该能够制作一个proc,然后将其作为块传递给.each,(但我不知道这会给你带来什么):
def process_jobs(stuff)
process_job = proc do |j|
if j.job_type_name
#...
end
end
Job.where(stuff).each(&process_job)
end