小编bar*_*own的帖子

Ruby中chr()的反义词是什么?

在许多语言中有一对函数,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.

ruby ascii

97
推荐指数
5
解决办法
8万
查看次数

如何使用Ruby元编程将回调添加到Rails模型?

我编写了一个简单的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)

如何动态地将这些回调添加到类中?

ruby metaprogramming ruby-on-rails

9
推荐指数
1
解决办法
3106
查看次数

如何在PostgreSQL中修复丢失的PostGIS SRID?

运行我的Rspec测试套件时收到以下错误:

PG::InternalError: ERROR:  GetProj4StringSPI: Cannot find SRID (4326) in spatial_ref_sys
Run Code Online (Sandbox Code Playgroud)

我知道我启用了PostGIS扩展.我该如何解决?

postgresql rspec postgis

9
推荐指数
2
解决办法
5219
查看次数

编写多行ActiveRelation查询的惯用方法是什么?

我的应用程序中有许多多行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对象的块似乎是惯用的,但我还没有看到这种方法.

什么是标准?

ruby ruby-on-rails

6
推荐指数
1
解决办法
4823
查看次数

为什么APEX Schedulable类通过空白实体发送HTML电子邮件?

我有一个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电子邮件:

  • 创建一个实现Schedulable接口的类.
  • 让execute()方法调用@future方法.
  • 让@future方法在发送电子邮件的类中调用启用Web服务的方法.

虽然这种方法很迂回,但它确实有效.

salesforce apex-code

5
推荐指数
1
解决办法
5414
查看次数

如何在APEX中内省变量的类?

我想在运行时知道变量/属性的类.例如:

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)

我找不到在文档中返回类类型的方法/属性(假设它在那里).我错过了吗?

dynamic salesforce apex-code

5
推荐指数
2
解决办法
7893
查看次数

有没有办法按SOQL中的日期时间字段的日期部分进行分组?

有没有办法(没有创建公式datevalue(datetime)字段)在日期时间字段的日期部分聚合SOQL查询?例如,我想做类似的事情:

select datevalue(datetimeField), count(Id) from object__c group by datevalue(datetimeField)

salesforce soql apex-code

3
推荐指数
1
解决办法
5326
查看次数

如何使用force.com为Amazon Simple Email Service创建带附件(MIME)的电子邮件?

我想通过force.com通过Amazon Web Services的简单电子邮件服务服务创建带附件的电子邮件,因为force.com组织范围内每天限制1,000封单个出站电子邮件.

SendEmailAWS'SES中的方法不支持附件,但它们通过SendRawEmail(至少对您有兴趣发送的大多数文件类型)提供对原始电子邮件的支持.

据我所知,你无法获得SingleEmailMessage的原始版本,需要自己构建它.

如何在APEX中创建多部分MIME电子邮件?

salesforce amazon-web-services apex-code amazon-ses

2
推荐指数
1
解决办法
1653
查看次数

编写多行懒惰计算方法的红宝石方法是什么?

我认为我可能不会以最红宝石的方式编写懒惰的实例化方法/属性.以此方法为例:

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)

有没有更像红宝石的方法来重构这种方法?

ruby

2
推荐指数
1
解决办法
313
查看次数