Может кто-нибудь, пожалуйста, сказать мне, что не так с этим кодом ...?
-
11-09-2019 - |
Вопрос
У меня есть раздел кода в контроллере, который заменяет существующий HTML тегом IMG.Код выглядит следующим образом:
render :update do |page|
page.replace_html "chart-div", "<img src=\"#{chart.chart_file}\"/>" #chart.chart_file is a path
end
По какой-то причине я продолжаю получать следующую ошибку:
ActionController::RoutingError (No route matches "/public/charts/1_WEEKLY_ACTUAL_LINE.jpg" with {:method=>:get}):
У меня есть НЕТ идея, почему это предполагает, что я хочу куда-то проложить маршрут.Кажется, что у меня должно быть "общедоступно" в начале, чтобы файл был правильно создан, однако я должен удалить "общедоступно", чтобы отобразить изображение.Есть какие-нибудь мысли?Существует ли более стандартный механизм, с помощью которого можно работать с динамически создаваемыми изображениями / элементами?
Лучшие.
ПРИМЕЧАНИЕ:Пожалуйста, никаких "загружаемых" плагинов.Все файлы создаются системой, никаких загрузок не происходит.
Решение
Добавляя файл, вы добавляете его в файловую систему, где он находится по адресу RAILS_ROOT/public/charts/1_WEEKLY_ACTUAL_LINE.jpg
.
Когда вы хотите отобразить файл, вам нужен URL-адрес, который указывает на него.Файлы, хранящиеся в public
доступ к каталогу осуществляется по их пути относительно public
справочник.
Вы могли бы попробовать что-то вроде этого:
class Chart < ActiveRecord::Base # or whatever the chart class is
def chart_url
chart_file.gsub(%r{^/public}, "")
end
end
Или же вы можете сохранить URL-адрес в базе данных и сделать:
class Chart < ActiveRecord::Base # or whatever the chart class is
def chart_file
"/public#{chart_url}"
end
end