【问题标题】:How do I handle a like query using Mobility in Rails?如何使用 Mobility in Rails 处理类似查询?
【发布时间】:2021-10-06 16:40:47
【问题描述】:

标题说明了一切。目标是处理简单的搜索。

尝试在我的控制器中执行此操作,该控制器与 Globalize 一起使用:

query = "%#{query}%"
docs = Doc.i18n.where(category_id: category_ids)
docs = docs.where("title like ?", query)

基于此模型:

class Doc < ApplicationRecord
  extend Mobility
  translates :title, type: :string
end

结果如下:

Mysql2::Error: Unknown column 'title' in 'where clause'

我尝试了以下方法,它不会抛出错误,但也不起作用(它返回所有 Doc 记录):

docs = docs.where("title like #{query}", locale: :en)

我已经尝试过了,但它实际上似乎并没有查询任何内容(它返回所有 Doc 记录):

docs.i18n do
  title.matches(query)
end

我找不到有关如何使用 Mobility 使用 like 运算符处理查询的任何文档。有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails mobility


    【解决方案1】:
    The following error is the result:
    

    如果这在 Globalize 中有效,那只是因为翻译表有一个名为 title 的列。 Mobility(或 Globalize)不解析字符串,因此永远不要期望手工编写的 SQL 可以处理已翻译的属性。

    Doc.i18n { title.matches(query) }
    

    应该可以(在 Mobility 自述文件中)。如果没有,您的模型中还有其他内容。

    【讨论】:

    • 是的,在自述文件中看到了,但没有看到任何关于手工 SQL 不起作用的信息。感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多