1

我有以下关系集,仪表板过滤器值有一个名为 filter_type 的列,它的值可以是 1 或 0。

class DashboardFilterValue < ApplicationRecord
  belongs_to :dashboard_filter
end
class DashboardFilter < ApplicationRecord
  has_many :dashboard_filter_values, dependent: :destroy
  accepts_nested_attributes_for :dashboard_filter_values
  before_save :check_parameter_length

  def check_parameter_length
    Rails.logger.info self.dashboard_filter_values.inspect #prints the ActiveRecord::Associations::CollectionProxy
    Rails.logger.info self.dashboard_filter_values.where(:filter_type => 0) #does not print anything
  end
end

before_save回调中,当我使用self.dashboard_filter_values.inspect时,会打印 ActiveRecord::Associations::CollectionProxy.

self.dashboard_filter_values.where(:filter_type => 0) 打印任何东西,即使有满足条件的记录。

before_save回调中,如何使用 where 条件过滤我想要的值。

在这方面的任何帮助都会非常棒。谢谢。

4

1 回答 1

2

我相信这是行不通的,因为采取了before_save行动。当您使用where它时,它正在执行数据库查询,但是因为您在保存之前查询数据库,所以没有返回任何内容。

我会说你有两个选择:

  1. 将其转换为after_save
  2. 改用Enumerable#select
Rails.logger.info self.dashboard_filter_values.select { |filter| filter.filter_type == 1 }
于 2019-11-27T14:49:33.257 回答