在许多语言中有一对函数,chr()并且ord(),该数字和字符值之间的转换.在某些语言中,ord()被称为asc().
Ruby有Integer#chr,效果很好:
>> 65.chr
A
Run Code Online (Sandbox Code Playgroud)
很公平.但你怎么走另一条路呢?
"A".each_byte do |byte|
puts byte
end
Run Code Online (Sandbox Code Playgroud)
打印:
65
Run Code Online (Sandbox Code Playgroud)
这非常接近我想要的.但我真的宁愿避免循环 - 我正在寻找一些足够短的东西,以便在声明时可读const.
我编写了一个简单的Cacheable模块,可以很容易地在父模型中缓存聚合字段.该模块要求父对象为需要在父级别进行缓存的每个字段实现cacheable方法和calc_方法.
module Cacheable
def cache!(fields, *objects)
objects.each do |object|
if object.cacheable?
calc(fields, objects)
save!(objects)
end
end
end
def calc(fields, objects)
fields.each { |field| objects.each(&:"calc_#{field}") }
end
def save!(objects)
objects.each(&:save!)
end
end
Run Code Online (Sandbox Code Playgroud)
我想将回调添加到包含此模块的ActiveRecord模型中.此方法将要求模型实现父模型的哈希值和需要缓存的字段名称.
def cachebacks(klass, parents)
[:after_save, :after_destroy].each do |callback|
self.send(callback, proc { cache!(CACHEABLE[klass], self.send(parents)) })
end
end
Run Code Online (Sandbox Code Playgroud)
如果我使用如下手动添加两个回调,这种方法很有效:
after_save proc { cache!(CACHEABLE[Quote], *quotes.all) }
after_destroy proc { cache!(CACHEABLE[Quote], *quotes.all) }
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用该cachebacks方法将这些添加到回调时,我收到以下错误.
cachebacks(Quote, "*quotes.all")
NoMethodError: undefined method `cachebacks' for #<Class:0x007fe7be3f2ae8>
Run Code Online (Sandbox Code Playgroud)
如何动态地将这些回调添加到类中?
运行我的Rspec测试套件时收到以下错误:
PG::InternalError: ERROR: GetProj4StringSPI: Cannot find SRID (4326) in spatial_ref_sys
Run Code Online (Sandbox Code Playgroud)
我知道我启用了PostGIS扩展.我该如何解决?
我的应用程序中有许多多行ActiveRelation查询方法,我不确定编写这些方法的最惯用方法.看看这个例子:
def postal_code_ids_within(miles)
nearby_postal_codes = PostalCode.where("latitude > :min_lat and latitude < :max_lat",
min_lat: (latitude - (miles.to_f / MILES_PER_DEGREE_LATITUDE.to_f / 2.to_f)),
max_lat: (latitude + (miles.to_f / MILES_PER_DEGREE_LATITUDE.to_f / 2.to_f)))
nearby_postal_codes = nearby_postal_codes.where("longitude > :min_lon and longitude < :max_lon",
min_lon: (longitude - (miles.to_f / MILES_PER_DEGREE_LONGITUDE.to_f / 2.to_f)),
max_lon: (longitude + (miles.to_f / MILES_PER_DEGREE_LONGITUDE.to_f / 2.to_f)))
nearby_postal_codes.pluck(:id)
end
Run Code Online (Sandbox Code Playgroud)
对我来说感觉有点不对劲.从中返回ActiveRelation对象的块似乎是惯用的,但我还没有看到这种方法.
什么是标准?
我有一个APEX课程,用于每天晚上7点发送电子邮件:
global class ReportBroadcaster implements Schedulable {
global ReportBroadcaster() {
}
global void execute(SchedulableContext sc) {
send();
}
global void send() {
PageReference page = new PageReference('/apex/nameofvfpage');
page.setRedirect(true);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
email.setSubject('Example Subject');
email.setHtmlBody(page.getContent().toString());
email.setToAddresses(new String[]{'test@test.com'});
Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
}
}
当我通过匿名APEX通过ReportBroadcaster实例执行send()方法时,它按预期传递.但是,当我安排课程时,电子邮件将以空白正文发送.如果我将电子邮件正文切换为纯文本,它可以正常传送(但这对我不起作用).
我该如何工作?
更新:
你不能从调度的APEX或@future方法调用PageReference实例上的getContent()(我不确定为什么会这样,但它就是这样).我认为解决方案是创建一个我将从@future方法调用的Web服务.看起来令人难以置信的hacky,但我不确定我还能做些什么.
最终更新:这是如何从预定的APEX发送HTML电子邮件:
虽然这种方法很迂回,但它确实有效.
我想在运行时知道变量/属性的类.例如:
Integer i = 5;
//pseudo-code
if (i.className == 'Integer') {
System.debug('This is an integer.');
} else {
System.debug('This is not an integer, but a ' + i.className);
}
Run Code Online (Sandbox Code Playgroud)
我找不到在文档中返回类类型的方法/属性(假设它在那里).我错过了吗?
有没有办法(没有创建公式datevalue(datetime)字段)在日期时间字段的日期部分聚合SOQL查询?例如,我想做类似的事情:
select datevalue(datetimeField), count(Id) from object__c group by datevalue(datetimeField)
我想通过force.com通过Amazon Web Services的简单电子邮件服务服务创建带附件的电子邮件,因为force.com组织范围内每天限制1,000封单个出站电子邮件.
SendEmailAWS'SES中的方法不支持附件,但它们通过SendRawEmail(至少对您有兴趣发送的大多数文件类型)提供对原始电子邮件的支持.
据我所知,你无法获得SingleEmailMessage的原始版本,需要自己构建它.
如何在APEX中创建多部分MIME电子邮件?
我认为我可能不会以最红宝石的方式编写懒惰的实例化方法/属性.以此方法为例:
def tax
@tax ||= Proc.new do
if flat_tax > commission_plan.tax_max
return commission_plan.tax_max
end if commission_plan.tax_max
if flat_tax < commission_plan.tax_min
return commission_plan.tax_min
end if commission_plan.tax_min
flat_tax
end.call
end
Run Code Online (Sandbox Code Playgroud)
有没有更像红宝石的方法来重构这种方法?
apex-code ×4
ruby ×4
salesforce ×4
amazon-ses ×1
ascii ×1
dynamic ×1
postgis ×1
postgresql ×1
rspec ×1
soql ×1