如何使用联接或其他方式让我使用where查询来比较另一个模型中的其他条件?
模型关系
class SonyAlarmLog < ActiveRecord::Base
belongs_to :sony_alarm_test
class SonyAlarmTest < ActiveRecord::Base
has_many :sony_alarm_bugs, :dependent => :destroy
虽然有效,但会返回SonyAlarmTest
的列,我想要sony_alarm_logs
SonyAlarmTest.joins{:sony_alarm_logs}
.where{ sony_alarm_logs.name =~ event_name }
失败,得到ActiveRecord::ConfigurationError: Association named 'sony_alarm_tests' was not found on SonyAlarmLog; perhaps you misspelled it?
错误
SonyAlarmLog.joins(:sony_alarm_tests)
.where{ name =~ event_name }
但仍有ActiveModel::MissingAttributeError: missing attribute: firmware_version
错误
我认为可能误用了squeel语法?
SonyAlarmLog.joins(:sony_alarm_test)
.where{ name =~ event_name }
.where{ utc_time.gt (my{utc_time} + TIME_CORRECTION) }
.where{ sony_alarm_tests.round.eq(my{sony_alarm_test.round}) }
.where{ sony_alarm_tests.ip =~ my{sony_alarm_test.ip} }
.where{ sony_alarm_tests.firmware_version =~ my{sony_alarm_test.firmware_version} }
答案 0 :(得分:0)
跟进评论......根据squeel的文档,您可以将查询编写为:
SonyAlarmLog.joins{:sony_alarm_test}.
where{
(name =~ event_name) &
(utc_time.gt (my{utc_time} + TIME_CORRECTION)) &
(sony_alarm_test.round.eq(my{sony_alarm_test.round})) &
(sony_alarm_test.ip =~ my{sony_alarm_test.ip}) &
(sony_alarm_test.firmware_version =~ my{sony_alarm_test.firmware_version})
}
您收到错误的原因可能是sony_alarm_tests.firmware_version
或sony_alam_test.firmware_version
。注意其中一个是复数,另一个是单数。你想要使用&#34; singular&#34;这里的版本是&#34; belongs_to&#34;。