我在Rails应用程序中收到此错误:
ActiveRecord::StatementInvalid in PaymentsController#index
SQLite3::SQLException: ambiguous column name: date: SELECT COUNT(*) FROM "payments" INNER JOIN "invoices" ON "payments"."invoice_id" = "invoices"."id" WHERE "invoices"."user_id" = 1 AND (date >= '2013-01-01' and date <= '2013-12-31')
问题似乎是我的date
以及invoices
表格中有payments
字段。
但我仍然不知道如何解决这个错误。
class User < ActiveRecord::Base
def number_of_payments_in(year)
payments.where("payments.date >= ? and payments.date <= ?", "#{year}-01-01", "#{year}-12-31").count
end
end
class Payment < ActiveRecord::Base
def self.search(year)
if year
where("date >= ? and date <= ?", "#{year}-01-01", "#{year}-12-31")
end
end
end
有人可以帮忙吗?
答案 0 :(得分:2)
这个答案可能有点模糊,因为从你的问题中不清楚self.search(year)
方法所属的课程,但请告诉我这是否有用,我们可以尝试更进一步。
我的猜测是,与number_of_payments_in
方法不同,在self.search
方法中,您未在where
调用中指定适当的表格。
在number_of_payments_in
中,您指定payments.date
,但在self.search
中,您只需使用date
。您说date
以及invoices
表中有一个payments
字段,因此跨两个表的连接调用都需要对date
的每个引用都设置为范围按表格。
在date
中self.search
前面添加相应的表格(正如您在number_of_payments_in
中所做的那样)可以解决问题。