如何在 Ruby on Rails 6 中正确应用 has_many 关系和 order by
Posted
技术标签:
【中文标题】如何在 Ruby on Rails 6 中正确应用 has_many 关系和 order by【英文标题】:How to correctly apply a has_many relationship with an order by in Ruby on Rails 6 【发布时间】: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 对我看到的错误没有影响。
任何关于如何正确使用它的建议将不胜感激。
【问题讨论】:
【参考方案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 不使用粗箭头 您好,谢谢您,将范围作为第二个参数起作用,并允许我正确使用 ->。我想我曾试图改变顺序,但保持了粗箭头。真的很感激。 谢谢乔尔·布鲁姆。编辑了答案以上是关于如何在 Ruby on Rails 6 中正确应用 has_many 关系和 order by的主要内容,如果未能解决你的问题,请参考以下文章
Ruby on Rails Rake在将rails项目从4.1.9更新到4.2.0后抛出“不正确的表名”错误
如何正确销毁 ruby on rails 中的关联记录?
Ruby on Rails 6.0.2.2 版如何使用jQuery hover() 方法
如何注销 Facebook - 在 Rails 应用程序中使用代码(Ruby on Rails Omniauth)
为 Ruby on Rails 6 创建弹性 beanstalk 环境时遇到问题(rvm、rbenv、.ruby-version 问题)