我使用 Sphinx 插件进行搜索和配置

define_index do
  indexes First_name, :sortable => true
  set_property :min_prefix_len => 1
end

这里 First_name 是列名称。

但我收到“搜索守护程序无法运行”的错误。当我将列名称设置为符号时,它运行得很好。

define_index do
  indexes :First_name, :sortable => true
  set_property :min_prefix_len => 1
end

请给我说清楚。


http://www.robertsosinski.com/2009/01/11/the-difference- Between-ruby-symbols-and-strings/

我认为你的例子不起作用,因为在第一个变体中 First_name 不是字符串。它是可变的

“First_name” - 将是一个字符串


顺便说一句,字符串和符号之间的区别在于,表示单个值的多个符号是唯一的,而字符串则不然。例如:

irb(term)> :symbol.object_id
=> 746921
irb(term)> :symbol.object_id
=> 746921


irb(term)> "string".object_id
=> 298788231
irb(main):011:0> "string".object_id
=> 297533890

此外,符号相等比较比字符串相等比较更快,因为它们是同一对象,而在字符串中需要比较值而不是对象 ID。


索引 First_name, :sortable => true

这里,rails 将 First_name 视为常量变量而不是列。

所以你可以使用

索引:名字,:可排序=> true

或者

索引 "First_name", :sortable => true

或者

将“First_name”列更改为“first_name”,然后您可以执行此操作

索引first_name, :sortable => true


Ruby 中字符串和符号之间的区别是什么?