2013-06-20 3 views
1

JS:

$(this).attr({ 
    src: "<%= asset_path("\\$hoverClass"'-red.jpg') %>" 
}); 

Это выводит /assets/$hoverClass-red.jpg вместо /assets/sports-red.jpg ('спорт' являются значение $ hoverClass).

ответ

3

Ruby не интерполирует строки как это. Что вы имеете в виду это:

<%= asset_path("#{$hoverClass}-red.jpg") %> 

Как примечание, используя $ -prefixed переменных в Ruby, как правило, плохая форма, так как это означает, что вы объявляя их в глобальном масштабе. Это неизбежно приводит к конфликтам имен, непреднамеренной сохранности данных и множеству других проблем, которые трудно поддаться. По возможности используйте переменные экземпляра @ -prefixed.

Вы также мог бы добиться этого, как:

$(this).attr(<%= { src: asset_path("#{$hoverClass}-red.jpg") }.to_json %>); 

Это, как правило, более надежны, так как собственно JSON маскирование делается для вас.

+0

$ hoverClass - это переменная JavaScript внутри функции. –

+0

Как вы ожидаете переменные JavaScript, которые выполняются в браузере, чтобы каким-то образом повлиять на вывод кода Ruby? Вам нужно будет интерполировать это на клиенте с помощью JavaScript: 'src.replace (/ \ $ hoverClass /, $ hoverClass)' – tadman

+1

Это отличный вопрос. * facepalm * –