以下是我在模型类中构建的内容
class Organization < ApplicationRecord
...
scope :filter_by_domestic, ->(host_name_designation) do
joins("LEFT JOIN events ON events.organization_id = organizations.id").
where(events: { host_name: host_name_designation })
end
end
当我使用这样的东西时,我得到了正确的结果:
@organizations = Organization.filter_by_domestic ['www.abc.com', 'www.xyz.com']
但是我想改进查询并仅在host_name
的最后部分得到结果,就像host_name
以子串.com
结尾的所有记录一样。
我需要为此split('.')last
应用where(events: { host_name: host_name_designation })
,我不知道正确的语法。
在我看来,这里的正确陈述是什么?
我希望能够写出如下内容:
scope :filter_by_domestic, ->(host_name_designation) do
joins("LEFT JOIN events ON events.organization_id = organizations.id").
where(events: { '.' + host_name:.split('.').last host_name_designation })
end
我需要where
返回这样的内容:
'.' + Event.first.host_name.split('.').last
Event Load (0.4ms) SELECT "events".* FROM "events" ORDER BY "events"."id" ASC LIMIT $1 [["LIMIT", 1]]
=> ".com"
实际上我只需要在host_name
子句中使用where
的最后一部分。我知道如何构建自己的where
子句来实现这一目标,但我希望生成查询而不是开发。
有任何线索吗?
答案 0 :(得分:0)
好的,看起来我正在寻找的解决方案不存在很可能是由于ActiveRecord的一些限制。