Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails和模型def而不是列_Ruby On Rails_Postgresql - Fatal编程技术网

Ruby on rails Rails和模型def而不是列

Ruby on rails Rails和模型def而不是列,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,我有一个包含发票的Rails应用程序 我在发票控制器中使用此def: def invoice_total self.invtimes.sum('price') + self.invexpenses.sum('price') + self.invaddhocs.sum('price') + self.invitems.sum('price') - self.payments.sum('amount') end 有没有办法计算发票总额 我试过这个: <td><%= Invoi

我有一个包含发票的Rails应用程序

我在发票控制器中使用此def:

def invoice_total
  self.invtimes.sum('price') + self.invexpenses.sum('price') + self.invaddhocs.sum('price') + self.invitems.sum('price') - self.payments.sum('amount')
end
有没有办法计算发票总额

我试过这个:

<td><%= Invoice.notdraft.where("invoice_date >= ? AND invoice_date < ?", janday, febday).sum(:invoice_total) %></td>

谢谢你的帮助

您正在调用一个ActiveRecord方法,该方法会触发一个SQL求和,但是您传递给该方法的参数是模型中定义的一个方法,Ruby知道它,而SQL更深一层,并且不知道它

您有两个选择:

在select中将.invoice\u total更改为SQL sum,这意味着在.invoice\u total方法中执行的逻辑可以通过SQL完成,但我无法帮助您,我对PostgreSQL不太在行

使用ruby计算发票总额,类似于发票。您的\u scopes.map&:invoice\u total.inject:+


.sum是用于触发SQL sum的ActiveRecord方法。但是,您可以将它与模型中定义的方法一起使用,而SQL中没有该方法。你必须用Ruby代码求和,而不是在SQL级别。-我认为有一种SQL方法可以将invoice_total作为伪列检索,然后通过SQL求和。我们需要PostgreSQL专业人士的帮助才能实现这一目标。Yoshiji先生-谢谢!我将其更改为使用。每个,然后添加值。如果你发帖作为答案,我会接受。
PG::Error: ERROR:  column "invoice_total" does not exist