我正在做一个RoR项目.以下是我的模型的适用部分.

Home

has_many :communities, :through => :availabilities
has_many :availabilities, :order => "price ASC"

Community

has_many :homes, :through => :availabilities
has_many :availabilities

Availability

belongs_to :home
belongs_to :community

The "availabilities" table in the database has the additional data column "price"

现在我可以打电话了

@home.availabilities.each do |a|
  a.community.name
  a.price

并按我所需的价格取回可用性数据.我的问题是:

有没有办法在avaliabilities.first.price之前自动订购房屋(第一=最低)?也许是default_scope :order

推荐答案

我建议避免使用default_scope,尤其是在另一张桌子上的价格之类的东西上.每次使用该表时,都会进行连接和排序,这可能会在复杂的查询中产生奇怪的结果,并且无论如何都会使查询速度变慢.

范围本身没有问题,它更简单,更清晰,你可以把它简化为:

scope :ordered, -> { includes(:availabilities).order('availabilities.price') }

PS:记住在price上加一个索引;也可以在这里看到其他的好答案来决定join/include.

Ruby-on-rails相关问答推荐

刺激中的Rails 7和 bootstrap 错误-无法解析模块说明符 bootstrap

会话控制器中的某种问题

active_storage.resolve_model_to_route的不同值代表什么意思?

Rails 7,Hotwire 动态表单,更新值不起作用

Sweet Alert 2 在 Rails 7 应用程序中无法正常工作

'elseif' 还存在吗?

如何使用 Vim 插入 ERB 标签?

ArgumentError:您需要使用 :if 提供至少一个验证

我如何存根 find_each 以在 rails 3 中进行 rspec 测试

rails 模型 has_many 本身

Rails 3.1 在开发模式下非常慢,因为assets资源 ,怎么办?

Rails 错误:无法批量分配受保护的属性

在具有唯一约束的关联中使用 Rails 中的 factory_girl.得到重复的错误

如何在每个操作的基础上禁用 Ruby on Rails 的日志(log)记录?

Rails 3:乘客找不到Bundle 程序安装的 git gem

Sidekiq Rails 4.2 使用 Active Job 还是 Worker?有什么不同

Rails:如何在rails中使用dependent::destroy?

在 Rails 4.1 中,如何通过枚举符号查找记录?

在 Rails 中显示主机名和数据库名

在 Rails 中 ActiveRecord 加入查询和 Select