diff --git a/lib/miq_expression/field.rb b/lib/miq_expression/field.rb index 6745f29c6e5..549f2f1ffcd 100644 --- a/lib/miq_expression/field.rb +++ b/lib/miq_expression/field.rb @@ -21,7 +21,12 @@ def self.is_field?(field) return false unless field.kind_of?(String) match = REGEX.match(field) return false unless match - model = match[:model_name].safe_constantize + model = + begin + match[:model_name].safe_constantize + rescue LoadError + nil + end return false unless model !!(model < ApplicationRecord) end diff --git a/spec/lib/miq_expression_spec.rb b/spec/lib/miq_expression_spec.rb index c0bdbc9954c..b7de9f84491 100644 --- a/spec/lib/miq_expression_spec.rb +++ b/spec/lib/miq_expression_spec.rb @@ -190,6 +190,11 @@ expect(sql).to eq("\"vms\".\"name\" = \"vms\".\"name\"") end + it "will handle values that look like they contain MiqExpression-encoded constants but cannot be loaded" do + sql, * = described_class.new("=" => {"field" => "Vm-name", "value" => "VM-name"}).to_sql + expect(sql).to eq(%q("vms"."name" = 'VM-name')) + end + it "generates the SQL for a < expression" do sql, * = described_class.new("<" => {"field" => "Vm.hardware-cpu_sockets", "value" => "2"}).to_sql expect(sql).to eq("\"hardwares\".\"cpu_sockets\" < 2")