如何使用字符串的最后一部分在一个值数组中过滤Rails中的表记录

时间:2016-12-05 14:22:06

标签: ruby-on-rails activerecord

以下是我在模型类中构建的内容

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子句来实现这一目标,但我希望生成查询而不是开发。

有任何线索吗?

1 个答案:

答案 0 :(得分:0)

好的,看起来我正在寻找的解决方案不存在很可能是由于ActiveRecord的一些限制。