ruby-on-rails – Rails 4 .order()被JOINS破坏了
我正在努力将现有的Rails 3.2应用程序升级到4.0.不过,我遇到了一堵砖墙.
我有三个模型,Client,Site和Contact.站点是属于客户端的物理位置,客户端可以有许多站点.联系人是属于一个或多个站点的人员.因此,客户可以通过站点拥有多个联系人. 客户: class Client < ActiveRecord::Base has_many :sites,-> { where(:sites => {:deleted => false}).order(:name => :asc) },:dependent => :destroy has_many :contacts,-> { order(:lastname => :asc) },:through => :sites end 站点: class Site < ActiveRecord::Base belongs_to :client has_and_belongs_to_many :contacts end 联系方式: class Contact < ActiveRecord::Base has_and_belongs_to_many :sites end 问题是,当我使用Client.find(1).contacts时,我得到一个ActiveRecord :: StatementInvalid异常:
有问题:我不知道ORDER BY …`contacts` .name` ASC来自哪里. Contacts表没有名称列,但Rails正在尝试使用它进行排序,我不知道它来自何处或如何删除它. ORDER BY`contact` .lastname`ASC很简单;它来自客户端模型. 这些关系在3.2中完美运行,但现在在4.0中抛出此异常. 更新: 我尝试删除.order()并使用default_scope – >站点模型中的{order(:name =>:asc)},但得到的错误与最初报告的完全相同. 解决方法
解决方案很简单.我没有使用.order(:column_name =>:asc),而是将其更改为.order(‘column_name ASC’),错误消失了,产生了预期的结果.我最初拥有后者,但是实现了前者作为我的Rails 3的一部分 – > 4升级,并在RailsCasts和其他文档中看到了这样的约定.
当我使用.joins()和按联接表列排序时,这也是必要的,正如我后来发现的那样.这是有道理的,因为关联也使用连接. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |