如何将某些东西转换为Ruby进程?
我有这两个if-else块,我认为它们作为Proc更好,但我仍然在思考Proc是什么。这只是一段我想经常调用的代码,放在一个地方,这样我只需要在那个地方更新它。它不是一个对象本身的方法,只是一些重复的代码 那么上面的语法是什么 您没有看到的代码(其中设置了“j”)是数据库游标上的.each循环 所以如何将某些东西转换为Ruby进程?,ruby,ruby-on-rails-3,foreach,Ruby,Ruby On Rails 3,Foreach,我有这两个if-else块,我认为它们作为Proc更好,但我仍然在思考Proc是什么。这只是一段我想经常调用的代码,放在一个地方,这样我只需要在那个地方更新它。它不是一个对象本身的方法,只是一些重复的代码 那么上面的语法是什么 您没有看到的代码(其中设置了“j”)是数据库游标上的.each循环 所以Job.where(东西)。每个人都做| j | 等等。制作过程的语法只是: if j.job_type_name j.type = j.job_type_name elsif j.type.le
Job.where(东西)。每个人都做| j |
等等。制作过程的语法只是:
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
如果需要,也可以使用Proc.new
而不是Proc
您应该能够生成一个proc,然后将其作为块传递给.each(但我不知道这会给您带来什么):
制作proc的语法如下所示:
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
如果需要,也可以使用Proc.new
而不是Proc
您应该能够生成一个proc,然后将其作为块传递给.each(但我不知道这会给您带来什么):
制作proc的语法如下所示:
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
如果需要,也可以使用Proc.new
而不是Proc
您应该能够生成一个proc,然后将其作为块传递给.each(但我不知道这会给您带来什么):
制作proc的语法如下所示:
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
如果需要,也可以使用Proc.new
而不是Proc
您应该能够生成一个proc,然后将其作为块传递给.each(但我不知道这会给您带来什么):
为什么您认为PROC适合这种情况?与普通方法相比,我认为使用
Proc
会使代码不那么清晰。此外,当您实际使用便携式Proc
或lambda
时,还有一些非常特殊的情况。大多数情况下,您只需在适当的位置使用块。这是一件非常小的事情,与您的问题无关:通常您可以通过最小化的使用来提高可读性代码>并添加括号(无论是否需要)。例如,您可以将倒数第二行更改为j.priority=(pri.blank?| | pri.job_priority.blank?)不适用:优先作业优先权
。为什么您认为程序适合这种情况?与普通方法相比,我认为使用Proc
会使代码不那么清晰。此外,当您实际使用便携式Proc
或lambda
时,还有一些非常特殊的情况。大多数情况下,您只需在适当的位置使用块。这是一件非常小的事情,与您的问题无关:通常您可以通过最小化的使用来提高可读性代码>并添加括号(无论是否需要)。例如,您可以将倒数第二行更改为j.priority=(pri.blank?| | pri.job_priority.blank?)不适用:优先作业优先权
。为什么您认为程序适合这种情况?与普通方法相比,我认为使用Proc
会使代码不那么清晰。此外,当您实际使用便携式Proc
或lambda
时,还有一些非常特殊的情况。大多数情况下,您只需在适当的位置使用块。这是一件非常小的事情,与您的问题无关:通常您可以通过最小化的使用来提高可读性代码>并添加括号(无论是否需要)。例如,您可以将倒数第二行更改为j.priority=(pri.blank?| | pri.job_priority.blank?)不适用:优先作业优先权
。为什么您认为程序适合这种情况?与普通方法相比,我认为使用Proc
会使代码不那么清晰。此外,当您实际使用便携式Proc
或lambda
时,还有一些非常特殊的情况。大多数情况下,您只需在适当的位置使用块。这是一件非常小的事情,与您的问题无关:通常您可以通过最小化的使用来提高可读性代码>并添加括号(无论是否需要)。例如,您可以将倒数第二行更改为j.priority=(pri.blank?| | pri.job_priority.blank?)不适用:pri.job\u priority
。答案是正确的,但我同意作者的观点:它似乎没有那么有用。是的,我不明白为什么需要一个过程;我认为有一种方法就可以了。我们可以定义一个方法,将作业作为参数并对其进行处理。答案是正确的,但我同意作者的观点:它似乎没有那么有用。是的,我不明白为什么需要proc;我认为有一种方法就可以了。我们可以定义一个方法,将作业作为参数并对其进行处理。答案是正确的,但我同意作者的观点:它似乎没有那么有用。是的,我不明白为什么需要proc;我认为有一种方法就可以了。我们可以定义一个方法,将作业作为参数并对其进行处理。答案是正确的,但我同意作者的观点:它似乎没有那么有用。是的,我不明白为什么需要proc;我认为有一种方法就可以了。可以定义一个方法,将作业作为参数并对其进行处理。