如何根据 Rails 控制台中的列格式过滤模型
How to filter a model on tha basis of Column Format in Rails Console
我一直在努力处理客户要求根据列格式筛选出模型(候选)
我面临的问题是该列输入的是 SSN 或 EIN。
SSN 的格式为 (xxx-xx-xxxx)
EIN 的格式为 (xx-xxxxxxx)
我的候选人 Table 包含字段 ssn_or_ein ,它取其中一个 2.
例如:
candidate111.ssn_or_ein => 111-11-1111
candidate222.ssn_or_ein => 22-2222222
我已经尝试获取所有 4000 个帐户,但我想这不是开发人员应该采用的方法。
我仍在学习 Rails,任何提示都会很有帮助。
您可以使用 like query. Put it in a scope 执行此操作,因此很容易获得。
class Candidate < ApplicationRecord
scope with_ein -> { where( "ssn_or_ein like ?", "__-_______" }
scope with_ssn -> { where( "ssn_or_ein like ?", "___-__-____" }
end
但是,如果 ssn_or_ein
的索引不正确,这可能会变慢。
考虑将它们存储在两个不同的列中。这使得验证和查询更简单。仅当您只需要 TIN - Taxpayer Information Number.
时才将它们放在一起
class Candidate < ApplicationRecord
scope with_ein -> { where.not( ein: nil ) }
scope with_ssn -> { where.not( ssn: nil ) }
EIN_RE = %r{^\d{2}-\d{7}$}
SSN_RE = %r{^\d{3}-\d{2}-\d{4}$}
validates :ein, format: { with: EIN_RE }, allow_nil: true
validates :ssn, format: { with: SSN_RE }, allow_nil: true
def tin
ssn || ein
end
class << self
def find_by_tin(tin)
where( ssn: tin ).or( where(ein: tin) )
end
end
end
我还建议您存储“规范化”的数据,不带破折号,只存储数字。这更易于使用,并且可以更改接受的格式而无需更改所有数据。将它们格式化为 decorator.
我一直在努力处理客户要求根据列格式筛选出模型(候选)
我面临的问题是该列输入的是 SSN 或 EIN。 SSN 的格式为 (xxx-xx-xxxx) EIN 的格式为 (xx-xxxxxxx)
我的候选人 Table 包含字段 ssn_or_ein ,它取其中一个 2.
例如: candidate111.ssn_or_ein => 111-11-1111 candidate222.ssn_or_ein => 22-2222222
我已经尝试获取所有 4000 个帐户,但我想这不是开发人员应该采用的方法。
我仍在学习 Rails,任何提示都会很有帮助。
您可以使用 like query. Put it in a scope 执行此操作,因此很容易获得。
class Candidate < ApplicationRecord
scope with_ein -> { where( "ssn_or_ein like ?", "__-_______" }
scope with_ssn -> { where( "ssn_or_ein like ?", "___-__-____" }
end
但是,如果 ssn_or_ein
的索引不正确,这可能会变慢。
考虑将它们存储在两个不同的列中。这使得验证和查询更简单。仅当您只需要 TIN - Taxpayer Information Number.
时才将它们放在一起class Candidate < ApplicationRecord
scope with_ein -> { where.not( ein: nil ) }
scope with_ssn -> { where.not( ssn: nil ) }
EIN_RE = %r{^\d{2}-\d{7}$}
SSN_RE = %r{^\d{3}-\d{2}-\d{4}$}
validates :ein, format: { with: EIN_RE }, allow_nil: true
validates :ssn, format: { with: SSN_RE }, allow_nil: true
def tin
ssn || ein
end
class << self
def find_by_tin(tin)
where( ssn: tin ).or( where(ein: tin) )
end
end
end
我还建议您存储“规范化”的数据,不带破折号,只存储数字。这更易于使用,并且可以更改接受的格式而无需更改所有数据。将它们格式化为 decorator.