2016-11-19 2 views
0

У меня есть символ, который я прохожу в вызове функции, как это в моем контроллере:символ не равен Symbol

set(:value, 1) 

Функция находится в вспомогательной функции, которая более или менее работает, как это

def set(where, what) 
    session[:a][where] = what 
end 
def get(where) 
    return session[:a][where] 
end 

Я использую этот же символ на мой взгляд, в другой функции, которая должна захватить и то же значение:

get(:value) 

И по отладке я обнаружил, что в конечном итоге проверяю 2 значения в своей хэш-таблице. Моя работа выглядит нормально, но когда я пытаюсь вызвать вызов из своего представления, мой хэш пытается найти значение, но с одинарными кавычками вокруг него. Я попробовал кучу вещей, чтобы увидеть, что происходит, изменение значений, которые будут жестко закодированы в функции, не помогает, однако, заменяет символ строкой.

ответ

1

Похоже, что ваши символы стробированы (во время сериализации сеанса). Чтобы этого избежать, укореняйте их превентивно!

def set(where, what) 
    session[:a][where.to_s] = what 
end 
def get(where) 
    return session[:a][where.to_s] 
end 
+0

Я понял, что использование символов позволит избежать использования строк. Но это работает, поэтому, возможно, я не понимаю, как работают символы. – Tormyst

+1

@ Тормист: нет, думаю, ты на правильном пути. Проблема здесь в том, что символы не работают _ везде. Символ - это очень неважно, если мы выйдем за пределы рубина. Скажем, мы хотим хранить наши данные на диске. –

+0

@Tormyst: не забудьте принять полезные ответы. :) –

Смежные вопросы