0

考虑一个包含title,descriptionlocale_restrictions字段的模型帖子。检查模型是否具有范围内的locale_restriction

区域设置限制字段指定应在哪些区域设置中显示帖子。它包含一个CSV值:en,de,be,nl

我想要做的是使用default_scope或命名范围只返回特定区域设置的模型实例。类似于(具有localized范围):Post.localized.all。然后,此作用域将查看当前语言环境I18n.locale,并返回在其locale_restrictions CSV中具有该语言环境的帖子。

我似乎无法得到这个工作,尝试了很多选择。我来最接近的是与SQL表达式LIKE

default_scope -> { where("locale_restrictions LIKE (?)", "%#{I18n.locale.to_s}%") } 

但是,如果有,例如失败,既是:en:benl区域,因为%en%将匹配:benl

显然你不能在一个范围内访问self.locale_restrictionsself返回类而不是实例。我找不出一种方法来分割locale_restrictions并检查它们。

什么是最好的方式去关于这个使用范围,或有任何最佳实践关于本地化数据库,我错过了吗?

我基本上寻找一种简单的方法来将我的控制器实例变量的范围限定到特定的语言环境。任何帮助将不胜感激。

回答

1

除了使用LIKE之外,还可以使用REGEXP,并在正则表达式中包含字开始和结束字。这应该是诀窍:

default_scope -> { where("locale_restrictions REGEXP (?)", "[[:<:]]#{I18n.locale.to_s}[[:>:]]") } 
+0

谢谢,这样做! – cabaret 2015-02-08 13:12:58

相关问题