Ruby on Rails-: символы, @iVars и "строки" - о боже! - PullRequest
21 голосов
/ 08 июня 2010

Новичок в Rails и попытка разобраться, когда / зачем использовать :symbols, @ivars, "strings" в рамках.

Мне кажется, я понимаю концептуальные различия между ними

  • только один :symbol экземпляр для проекта
  • один @ivar для экземпляра
  • несколько "strings" - так как они создаются всякий раз, когда на них ссылаются (?)

Не стесняйтесь меня поправлять!

Основная путаница заключается в понимании правил & соглашений чего ожидает Rails - где и ПОЧЕМУ?

Я уверен, что есть "Ах, ха!"момент наступает, но у меня его еще не было ... так как он кажется мне довольно произвольным (исходя из C / Obj-C).

-thx

Ответы [ 5 ]

15 голосов
/ 08 июня 2010

@instance_variable является переменной экземпляра. Обычно он определяется в контроллере и доступен в представлениях.

"string" - это строка, как и на любом другом языке.

:symbol, как вы уже сказали, это эффективный способ представления имен и строк; они буквальные значения. Он инициализируется и существует только один раз во время сеанса ruby. Это не строка, так как у вас нет доступа к методам String; это символ Кроме того, он неизменен. По этим причинам становится очень удобно представлять ключи в хешах. В Rails-методах используются хэши, поэтому символы везде встречаются в Rails.

4 голосов
/ 09 июня 2010

Символы похожи на указатели (они указывают не на 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 голосов
/ 08 июня 2010

Переменные экземпляра довольно просты: они отслеживают свойства / значения конкретного экземпляра, поэтому вы используете их, когда значения будут различаться в разных экземплярах.

Символы и строки немного более произвольны. Символы обычно используются для констант значений, почти так же, как язык, такой как C, использовал бы перечисления; В Ruby нет перечислений, поэтому для заполнения этого пробела часто используются символы. Строки используются для более разнообразных фрагментов текста, которые не будут использоваться в качестве флага или аналогичной константы.

1 голос
/ 08 июня 2010

Переменные экземпляра на самом деле не принадлежат к тому же списку, что и строки и символы. Строки и символы представляют собой типы классов , тогда как переменные экземпляра представляют собой тип переменной . Таким образом, переменные экземпляра (@var) - это просто способ хранения значения между методами одного экземпляра одного класса:

class Calculator
  @counter = 0

  def inc
    @counter += 1
  end

  def dec
    @counter -= 1
  end
end

Здесь - хорошая статья о различии символов и строк.

0 голосов
/ 07 октября 2014

Контроллер Rails обращается к базе данных rails через Models by ORM (Object Relation Mapping), т.е. класс модели будет сопоставлен с соответствующей таблицей, а объекты напрямую сопоставлены со строками в таблице. Чтобы получить результаты для данного пользовательского запроса переменная экземпляра (@instance_variable) является идеальным выбором для работы с ней.

...