【问题标题】:Sort model records based on values in related model根据相关模型中的值对模型记录进行排序
【发布时间】:2015-04-28 13:20:46
【问题描述】:

我目前在成员模型文件中使用对成员记录进行排序:

default_scope -> { order(:organization_id, :username) }

组织和成员之间是一对多的关系。我不想根据组织 ID 进行排序,而是根据组织名称对成员进行排序,组织名称是组织模型中的一列。我该怎么做?

我尝试了以下几行,但这不起作用;它似乎只接受来自同一模型内的变量,而不是来自与其有关系的模型。

default_scope -> { order(:organization.name, :username) }
default_scope -> { order(organization.name, :username) }

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 relationship


    【解决方案1】:

    使用.includes

    default_scope -> { includes(:organization).order('organizations.name , username') }
    

    【讨论】:

    • 使用该行,各种测试都会失败并显示消息ActiveRecord::ConfigurationError: Association named 'organizations' was not found on Member; perhaps you misspelled it?。虽然关联设置正确。由于一个成员有 1 个组织,我也尝试使用 organization 而不是 organization*s* 但后来我收到错误消息说 ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: organization.name: SELECT "members"."id" ... etc.
    • 哦,尝试编辑一个。我已将includes(:organizations) 更新为包括(:组织)。立即尝试。
    【解决方案2】:

    使用这行代码:

    default_scope -> { includes(:organizations).order('organizations.name , username') }

    【讨论】:

      猜你喜欢
      • 2018-03-25
      • 2019-02-23
      • 2013-04-17
      • 2012-05-16
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      • 2023-03-27
      相关资源
      最近更新 更多