【问题标题】:Ordering some data with information from another table使用来自另一个表的信息对一些数据进行排序
【发布时间】:2018-10-22 17:28:40
【问题描述】:

这里还有一些和我一样的问题,但没有一个真正适合我。

我有一个 Rails 项目,有 3 个模型:Unity、City、State,它们之间的关系如下:

class City < ApplicationRecord
  belongs_to :state
  has_many :unities
end

class State < ApplicationRecord
    has_many :cities
end

class Unity < ApplicationRecord
    belongs_to :city
    belongs_to :state, through: :city
end

我希望我能够根据他们的 city.name 或 state.name 对我的单位进行排序,以及根据他们的 state.name 对城市进行排序。但我就是想不通。例如,我尝试了 City.all.joins(:state).order('state.id'),正如 StackOverflow 的一些问题中所建议的那样,但它给了我 missing FROM clause entry for 'city'。我怎么能做到?

【问题讨论】:

  • 您的错误具有误导性。您在执行City.all.joins(:state).order('state.id') 时是否收到该错误?
  • belongs_to :state, through: :city 请注意 through 不是 belongs_to 关联的选项
  • 仅在您的示例中的语句永远不会引发 SQL 错误(除非您在控制台中运行它)。也许您可以准确地阐明当您运行什么语句时会出现什么错误。显示返回的 City.all.joins(:state).order('state.id').explain 字符串会有所帮助。
  • 应该是 'states.id' 而不是 'state.id'。 Order 子句需要表名而不是关联名
  • @AkshayGoyal,如果你能把它写成一个真正的答案,我可以把它标记为接受,因为就是这样,真的谢谢

标签: ruby-on-rails ruby postgresql relationship


【解决方案1】:

应该是order('states.id') 而不是order('state.id')。 Order 子句需要表名而不是关联名。

【讨论】:

    猜你喜欢
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 2015-04-05
    • 2023-04-01
    相关资源
    最近更新 更多