大佬教程收集整理的这篇文章主要介绍了ruby-on-rails – Rails 4 .order()被JOINS破坏了,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有三个模型,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 BY …`contacts` .name` ASC来自Clients模型中的第一个has_many.但是,目的是对网站进行排序,而不是联系人.我尝试将其更改为.order(‘sites.name’=>:asC),并且SQL抱怨没有名为sites.sites.name的列.因此,似乎在使用时:through =>使用has_many,order子句被破坏了.
我尝试删除.order()并使用default_scope – >站点模型中的{order(:name =>:asC)},但得到的错误与最初报告的完全相同.
以上是大佬教程为你收集整理的ruby-on-rails – Rails 4 .order()被JOINS破坏了全部内容,希望文章能够帮你解决ruby-on-rails – Rails 4 .order()被JOINS破坏了所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。