如何在视图中链接到模型方法的结果?

时间:2016-08-09 13:39:38

标签: ruby-on-rails

我的模型中有这个方法:

  ## Finds invoice with next upcoming due date. ##
  def self.next_due
    where("due_date >= ? AND status = ?", Time.now, 'Open').order("due_date ASC").first ? where("due_date >= ?", Time.now).order("due_date ASC").first.due_date : ''
  end

这将返回下一张发票到期日的due_date。

我正在尝试将link_to设为实际发票,但到目前为止还无法让它发挥作用。

我觉得自己是个白痴,因为当我对链接没有任何问题时我无法建立一个简单的链接,直到现在我都无法自行解决。< / p>

是否可以将此查询返回的发票存储为我可以从视图中调用并链接到的变量?如果没有,那么我将如何建立链接呢?

感谢。

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

def self.next_due # This is a Class method!
  where("due_date >= ? AND status = ?", Time.now, 'Open').order("due_date ASC").first.try(:due_date)
end

然后在你的观点中你可以像这样使用它:

link_to Invoice.next_due, your_path_helper

你的命名并不是很明确,我建议你改变一些事情,比如:

# Invoice model
def self.next_invoice
  where("due_date >= ? AND status = ?", Time.now, 'Open').order("due_date ASC").first
end

然后在你的观点中调用它:

- if next_invoice = Invoice.next_invoice
  = link_to next_invoice.due_date, your_path_helper

答案 1 :(得分:0)

这是因为您返回截止日期

class Invoice
  def self.next_due
    where("due_date >= ? AND status = ?", Time.now, 'Open').order("due_date ASC").first
  end
end

然后可能在帮手

def next_due_invoice_link
  invoice = Invoice.next_due
  return if invoice.blank?
  link_to invoice.due_date, invoice_path(invoice)
end