【问题标题】:How to correctly apply a has_many relationship with an order by in Ruby on Rails 6如何在 Ruby on Rails 6 中正确应用 has_many 关系和 order by
【发布时间】:2021-08-19 16:44:25
【问题描述】:

我正在 Rails 6 中创建一个用户模型来镜像存在于单独项目中的模型。 存在导致一些问题的 has_many 关系。

class User < ApplicationRecord
      has_many :activation_histories, inverse_of: :user , => { order "created_at  DESC"} 
end

我基于使用过 Rails 3.2 的项目并像这样成功地工作

class User < ApplicationRecord
       has_many :activation_histories, inverse_of: :user, order: "created_at desc" 
end

我可以从官方文档中看到使用按外观排序的示例

class Author < ApplicationRecord
  has_many :books, -> { order "date_confirmed DESC" }
end

当我这样运行它时,我得到一个错误,它期望 '=>' 而不是 '->',但是当我使用 '=>' 时,我得到了

app/models/user.rb:6: syntax error, unexpected =>
app/models/user.rb:6: syntax error, unexpected '}', expecting `end'
app/models/user.rb:6: syntax error, unexpected =>
app/models/user.rb:6: syntax error, unexpected '}', expecting `end'
app/models/user.rb:6: syntax error, unexpected =>
app/models/user.rb:6: syntax error, unexpected '}', expecting `end'

我对 Ruby on Rails 比较陌生,不确定我在哪里出错或如何继续。 删除 inverse_of 对我看到的错误没有影响。

任何关于如何正确使用它的建议将不胜感激。

【问题讨论】:

    标签: ruby-on-rails associations ruby-on-rails-6 has-many model-associations


    【解决方案1】:

    尝试改变

    has_many :activation_histories, inverse_of: :user , -> { order "created_at  DESC"} 
    

    has_many :activation_histories, -> { order "created_at  DESC"} , inverse_of: :user
    

    您的scope 应该是您的第二个参数。 https://www.rubydoc.info/docs/rails/4.1.7/ActiveRecord%2FAssociations%2FClassMethods:has_many

    【讨论】:

    • 应该是 -> ,ruby 中的 lambdas 不使用粗箭头
    • 您好,谢谢您,将范围作为第二个参数起作用,并允许我正确使用 ->。我想我曾试图改变顺序,但保持了粗箭头。真的很感激。
    • 谢谢乔尔·布鲁姆。编辑了答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2019-05-27
    • 2016-04-14
    • 1970-01-01
    • 2017-09-26
    相关资源
    最近更新 更多