Ruby on Rails-: символы, @iVars и "струны" - о, мой!
Новое для Rails и попытка разгадать, когда/зачем использовать :symbols
, @ivars
, "strings"
в рамках.
Думаю, я понимаю различия между ними концептуально
- только один экземпляр
:symbol
для каждого проекта
- один
@ivar
для каждого экземпляра
- multiple
"strings"
- как они создаются всякий раз, когда ссылаются (?)
Не стесняйтесь поправлять меня!
Основная путаница заключается в понимании правил и соглашений того, что ожидает Rails - где и ПОЧЕМУ?
Я уверен, что есть "Ах, ха!" момент, но у меня его еще не было... поскольку это кажется мне довольно произвольным (исходя из C/Obj-C).
-спасибо
Ответы
Ответ 1
@instance_variable
- это переменная экземпляра. Он обычно определяется в контроллере и доступен в виде.
"string"
- это строка, как на любом другом языке.
:symbol
, как вы упомянули, это эффективный способ представления имен и строк; они являются буквальными значениями. Он инициализируется и существует только один раз во время сеанса ruby. Это не строка, так как у вас нет доступа к методам String; это Символ. Кроме того, он непреложный. По этим причинам очень удобно представлять символы в хэш файлах. Методы Rails используют хеши, таким образом, вы находите символы немного повсюду в Rails.
Ответ 2
Переменные экземпляра довольно просты: они отслеживают свойства/значения конкретного экземпляра, поэтому вы используете их, когда значения будут различаться в разных экземплярах.
Символы против строк немного более произвольны. Символы обычно используются для постоянных значений, во многом таким же образом, что язык, такой как C, будет использовать перечисления; Ruby не имеет перечислений, поэтому символы часто используются для заполнения этого пробела. Строки используются для более разнообразных фрагментов текста, которые не будут использоваться в качестве флага или аналогичной константы.
Ответ 3
Символы похожи на указатели (не на C-ish, но на C-ish мышление, они указывают). Ну, вы используете символы, когда находитесь в свойствах манипуляции. Они являются одним из великих преимуществ динамического набора текста, если вы спросите меня. (Для потенциальных избирателей я не имею в виду никакого вреда, я знаю, что они не указатели, но для меня это было ах-ха).
:action => "index"
Переменные экземпляра необходимы при извлечении данных из вашей модели и вы хотите использовать их в своих представлениях (внутри вашего метода контроллера).
def my_controller_method
@myposts = Post.find(:all)
end
# inside view
<% for @myposts do |m| %>
<i><%= m.title %></i>
<% end %>
Просто хедз-ап, правила и условные обозначения меняются быстро (как я обнаружил в моем Rails-путешествии) довольно много для каждой версии, имея правильное руководство с правильными Rails. Удачи в кодировании!
Ответ 4
Переменные экземпляра на самом деле не принадлежат к тому же списку, что и строки и символы. Строки и символы являются типами классов, тогда как переменные экземпляра являются типом переменной. Итак, переменные экземпляра (@var
) - это всего лишь способ хранения значения между методами одного экземпляра одного класса:
class Calculator
@counter = 0
def inc
@counter += 1
end
def dec
@counter -= 1
end
end
Здесь - хорошая статья о различии между символами и строками.
Ответ 5
Контроллер Rails получает доступ к базе данных рельсов через модели по ORM (сопоставление объектных привязок), т.е. класс модели будет сопоставлен с соответствующей таблицей, а объекты непосредственно сопоставляются с строками в таблице. Чтобы получить результаты для заданного пользовательского запроса, переменная экземпляра (@instance_variable) является идеальным выбором для решения этой проблемы.