【发布时间】: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