【问题标题】:rails 3 activerecord - for :joins wrong sql is generatedrails 3 activerecord - for :joins 生成错误的 sql
【发布时间】:2010-09-16 20:42:38
【问题描述】:

我有以下两个课程。

class Customer < ActiveRecord::Base
 set_table_name "customer"
 set_primary_key "customerId"
 has_many :new_orders, :foreign_key => "customerid", :primary_key => "customerId", :class_name => "NewOrder"
end

class NewOrder < ActiveRecord::Base
 set_table_name "viewNewOrders"
 set_primary_key "orderid"
 belongs_to :customer, :foreign_key => "customerid", :primary_key => "customerId"
end

我无法通过触摸数据库来更改任何表、视图或列名。

这很好用:

new_orders_last_2_weeks = 
 NewOrder.where("orderdate >= :start and orderdate < :end", 
 {:start => period_start, :end => period_end})

但是:

new_orders_last_2_weeks = 
 NewOrder.joins(:customer).where("orderdate >= :start and orderdate < :end", 
 {:start => period_start, :end => period_end})

生成这个错误的 sql:

SELECT     `viewNewOrders`.* FROM       `viewNewOrders`  INNER JOIN `customer` ON `customer`.`customerId` IS NULL WHERE     (orderdate >= '2010-09-02' and orderdate < '2010-09-16')

如何让它在内部连接中生成正确的条件?

谢谢。

【问题讨论】:

    标签: mysql activerecord ruby-on-rails-3 join


    【解决方案1】:

    问题在于 ActiveRecord 对表和字段名称区分大小写。

    变化很大

    set_table_name "viewNewOrders"
    

    set_table_name "viewneworders"
    

    解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 2016-07-03
      • 1970-01-01
      相关资源
      最近更新 更多