Concat Integer&用于形成方法的字符串

时间:2015-10-15 22:37:46

标签: string ruby-on-rails-4 integer concatenation

我有点怀疑这是可能的,但我想我会试着看看社区是否可以帮我提出解决方案。

在我的应用中,用户可以创建发票,我试图允许他们从表单设置定期发票,这样他们就可以选择一个数字,一个间隔(年,月,日),然后从那里我将成为能够获得间隔。

理想情况下它会形成如下:1.year.from_now

这会给我发送下一张发票的日期。这是一个内置的rails帮助器,我想使用我的数据库中的信息来形成

所以在Invoice.create上,我检查一下这是一个定期发票,它将变成一个模板(Recurringinvoice),如果它是我创建它:

    Recurringinvoice.create(customer_id: @customer.id, company_id: @company.id, 
invoice_number: @invoice.invoice_number, private_notes: @invoice.private_notes, 
customer_notes: @invoice.customer_notes, payment_terms: @invoice.payment_terms, 
status: "unpaid", discount: @invoice.discount, po_number: @invoice.po_number, 
interval: @invoice.interval, 
invoice_interval_number: @invoice.invoice_interval_number)

我想做什么:@ invoice.invoice_interval_number +“。” + @ invoice.interval +“。from_now”

那会给我1.year.from_now,或2.days.from_now等等。

无论如何我能做到这一点吗?有没有更好的解决方案我没想到?

1 个答案:

答案 0 :(得分:1)

在ruby中,您可以使用send方法按名称调用方法。

  • @invoice.invoice_interval_number是一个整数。
  • @invoice.interval包含您要在整数上调用的方法的名称。
  • from_now是您要在上一个方法的结果上调用的方法。

这给了我们:

@invoice.invoice_interval_number.send(@invoice.interval).from_now

文档:http://ruby-doc.org/core-2.2.3/Object.html#method-i-send