#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. Вы правы, хорошая работа заключается в том, чтобы никогда не обходить это! В итоге я просто сменил название модели, это было не удивительно сложно, но и не весело.