使用SQLite数据库在Ruby on Rails中使用不明确的列名?

时间:2013-05-18 18:38:51

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord ruby-on-rails-3.2

我在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

有人可以帮忙吗?

1 个答案:

答案 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的每个引用都设置为范围按表格。

dateself.search前面添加相应的表格(正如您在number_of_payments_in中所做的那样)可以解决问题。