Индекс Thinking Sphinx конфликтует с именем метода Ruby

#ruby #ruby-on-rails-3

#ruby #ruby-on-rails-3

Вопрос:

Я по незнанию назвал модель в своем приложении Rails System , которая также является методом ruby core. Эта модель находится в взаимосвязи с другой моделью Project , которую я пытаюсь проиндексировать.

В идеале я хочу настроить свой индекс следующим образом:

 define_index do
  indexes :name, :sortable => true
  indexes system(:name), :sortable => true, :as => :system_name
end
  

Я мог бы изменить название модели, но я бы назвал это компромиссом, и я не уверен, что мне это нужно. Есть ли хороший обходной путь для этого?

ruby 1.8.7, rails 3.0.7, thinking_sphinx 2.0.3

Ответ №1:

Хороший способ присвоения имен переменным или классам пользовательского уровня с помощью зарезервированных слов (ключевые слова языка и методы / классы на уровне платформы) — это не делать этого в первую очередь.

Второй лучший обходной путь — использовать scoping :: , чтобы убедиться, что вызываемое вами имя является тем, которое вы хотите

 ::system()  # calls the actual system method as defined by Ruby
APPNAME::MODEL_NAME # would call the model defined as `APPNAME::MODEL_NAME`
  

Я действительно не могу придумать обходной путь без пространства имен ваших моделей (хотя, зная Ruby, более чем возможно, что некоторые функциональные возможности существуют — просто мне это никогда не было нужно). Вероятно, все они tbh, поскольку это стало бы еще более запутанным, если бы только половина ваших моделей была разделена именами. В конечном счете, это просто больше ввода, помнящего пространство имен все.

Комментарии:

1. Вы правы, хорошая работа заключается в том, чтобы никогда не обходить это! В итоге я просто сменил название модели, это было не удивительно сложно, но и не весело.