Tri*_*rip 6 ruby regex validation ruby-on-rails
我正在尝试验证Model.category是否等于任何现有的类别名称
unless Category.exists?(:name => self.category.downcase)
Run Code Online (Sandbox Code Playgroud)
我不得不放下这个以确保所有这些都是羽绒的,这样它们就可以匹配成串.但它是一个很大的服务器来更新属性before_save,我想通过regexp匹配它们.像这样的东西
unless Category.exists?(:name => /#{self.category}/ }
Run Code Online (Sandbox Code Playgroud)
有可能吗?或者有更好的方法吗?
mip*_*adi 23
是的,你可以在正则表达式中使用变量插值.
>> s = "thing"
=> "thing"
>> r = /#{s}/
=> /thing/
Run Code Online (Sandbox Code Playgroud)
我无法理解您在小写方面的真正问题是什么,但我想您必须在比较之前先小写现有类别。我想 regexp 在这里不会有帮助,因为条件中的“=>”是精确区分大小写的比较(数据库中的默认值),并且 AR 不支持 regexp。你应该用另一种方式来做:
PostgreSQL:
books = Book.find :all, :conditions => [ "authors ILIKE ?", "smith" ]
Run Code Online (Sandbox Code Playgroud)
数据库:
author = "Smith".downcase
books = Book.find :all, :conditions => [ "LOWER(authors) LIKE ?", "#{author}" ]
Run Code Online (Sandbox Code Playgroud)
或者
books = Book.find :all, :conditions => [ "authors LIKE ? COLLATE utf8_general_ci", "smith"]
Run Code Online (Sandbox Code Playgroud)
存在吗?方法应与上面的 :conditions 参数一起使用。如果这导致您遇到任何数据库点击,例如您有数百万个类别。然后,您应该创建具有小写名称的单独列,并将其与简单的“=>”条件进行比较。
| 归档时间: |
|
| 查看次数: |
3697 次 |
| 最近记录: |