2013-07-19 3 views
0

Я хотел бы знать, как указать полный URL-адрес src attibute в image_tag?Ruby On Rails - Image Tag Issue

В настоящее время я использую:

image_tag(object.team.team_logo, :alt => object.team.name) 

И ЦСИ атрибут объявления преобразуется неправильно в:

http://0.0.0.0:3000/assets/%20http://a.espncdn.com/i/teamlogos/soccer/500/103.png 

Я попытался подножка рек активов: прекомпиляции & & рек активов: clean_expired но приложение все еще лечит полный URL-адрес в качестве предварительно скомпилированного актива.

Заранее благодарен!

ответ

2

Перед тем, как поместить их в базу данных, необходимо правильно очистить и проверить свои значения team_logo: первый символ вашего значения object.team.team_logo - это пробел.

Если проследить через image_tag реализации, вы обнаружите, что он в конечном итоге вызывает asset_path:

def asset_path(source, options = {}) 
    source = source.to_s 
    return "" unless source.present? 
    return source if source =~ URI_REGEXP 
    #... 

У вас есть ведущие места в team_logo поэтому тест URI_REGEXP терпит неудачу и Rails будет предварять путь активов (и URL-адрес кодирует строку, следовательно, представление вашего пространства) %20.

Вы должны сделать несколько вещей:

  1. добавить проверку вашей модели, чтобы убедиться, что team_logo всегда хорошо сформирован URL.
  2. Добавьте обратный вызов before_validation к вашей модели, чтобы очистить любые пробелы в приходящих team_logo значениях.
  3. Перейдите по всем team_logo значениям в базе данных и очистите их, вам, вероятно, потребуется отремонтировать или удалить некоторые из них вручную.

После того как вы очистили свои данные, ваш image_tag будет работать должным образом.

Я предполагаю, что вы можете удалить пропущенные пробелы в своем представлении, что довольно неприятно и не должно быть сделано, если вам не понадобится немедленное исправление, чтобы не допустить падения бизнеса в течение следующих пяти минут. И даже тогда вы захотите очистить данные и отбросить «очистить пробел в представлении» сразу.