Sql 它本身(间接地)查询了花名册\成员\姓名。我将该行更改为直接查询花名册信息,如下所示:m.花名册信息.成员名称。再次感谢你的努力!尽管如此,我还是奖励了你,因为你的建议让我更深入地挖掘,并最终确定了问题和解决方案。再次感谢! subscribers = [
Sql 它本身(间接地)查询了花名册\成员\姓名。我将该行更改为直接查询花名册信息,如下所示:m.花名册信息.成员名称。再次感谢你的努力!尽管如此,我还是奖励了你,因为你的建议让我更深入地挖掘,并最终确定了问题和解决方案。再次感谢! subscribers = [,sql,ruby-on-rails,activerecord,ruby-on-rails-3.2,query-optimization,Sql,Ruby On Rails,Activerecord,Ruby On Rails 3.2,Query Optimization,它本身(间接地)查询了花名册\成员\姓名。我将该行更改为直接查询花名册信息,如下所示:m.花名册信息.成员名称。再次感谢你的努力!尽管如此,我还是奖励了你,因为你的建议让我更深入地挖掘,并最终确定了问题和解决方案。再次感谢! subscribers = [] mailgroup.mailgroup_members.opted_to_receive_email.includes(:roster_contact, :roster_info).each { |m| subscribers <
它本身(间接地)查询了
花名册\成员\姓名。我将该行更改为直接查询花名册信息
,如下所示:m.花名册信息.成员名称
。再次感谢你的努力!尽管如此,我还是奖励了你,因为你的建议让我更深入地挖掘,并最终确定了问题和解决方案。再次感谢!
subscribers = []
mailgroup.mailgroup_members.opted_to_receive_email.includes(:roster_contact, :roster_info).each { |m|
subscribers << { :EmailAddress => m.roster_contact.member_email,
:Name => m.roster_contact.member_name,
:CustomFields => [ { :Key => 'gender',
:Value => m.roster_info.gender.present? ? m.roster_info.gender : 'X'
} ]
} if m.roster_contact.member_email.present?
}
subscribers
SELECT `ROSTER_INFO`.* FROM `ROSTER_INFO` WHERE `ROSTER_INFO`.`ID` IN ('1450', '1000', '1111')
RosterInfo Load (84.8ms) SELECT `ROSTER_INFO`.* FROM `ROSTER_INFO` WHERE `ROSTER_INFO`.`ID` = '1450' LIMIT 1
RosterInfo Load (59.2ms) SELECT `ROSTER_INFO`.* FROM `ROSTER_INFO` WHERE `ROSTER_INFO`.`ID` = '1000' LIMIT 1
RosterInfo Load (56.8ms) SELECT `ROSTER_INFO`.* FROM `ROSTER_INFO` WHERE `ROSTER_INFO`.`ID` = '1111' LIMIT 1
class RosterInfo < ActiveRecord::Base
self.primary_key = 'ID'
end
class RosterContact < ActiveRecord::Base
self.primary_key = 'ID'
has_many :mailgroup_members, foreign_key: 'rosterID'
has_many :mailgroups, through: :mailgroup_members
has_one :roster_info, foreign_key: 'ID' # can use this line
#belongs_to :roster_info, foreign_key: 'ID' # or this with no difference
def member_name # I added this method to this
roster_info.member_name # question only *after* having
end # figured out the problem.
end
class RosterWeb < ActiveRecord::Base
self.primary_key = 'ID'
end
class Mailgroup < ActiveRecord::Base
self.primary_key = 'ID'
has_many :mailgroup_members, foreign_key: 'mailCatID'
has_one :mailing_list, foreign_key: :legacy_id
end
class MailgroupMember < ActiveRecord::Base
self.primary_key = 'ID'
belongs_to :mailgroup, foreign_key: 'mailCatID'
belongs_to :roster_contact, foreign_key: 'rosterID'
belongs_to :roster_info, foreign_key: 'rosterID'
belongs_to :roster_web, foreign_key: 'rosterID'
scope :opted_to_receive_email, joins(:roster_web).where('ROSTER_WEB.receiveEmail=?', 1)
end
class RosterInfo < ActiveRecord::Base
has_one :roster_contact, foreign_key: 'ID'
end
class RosterContact < ActiveRecord::Base
has_one :roster_info, foreign_key: 'ID'
end
:Name => m.roster_contact.member_name,
:Name => m.roster_info.member_name,