У меня есть блог на Sinatra со следующим методом:
module Tir
module Blog
class Article
def url
[Tir::Config.domain, meta('relative_path')].join
end
end
end
end
Вызов этого для экземпляра Article выводит полный URI статьи, например:
"http://example.com/2018/07/08/test-article"
Удивительный Mustermann выдает мне следующую ошибку:
Mustermann :: CompileError: имя записи не может быть пустым: "/ http://example.com/2018/07/08/test-article"
- Почемувставляет ли он косую черту в начале строки?
- Почему это так сильно ограничивает генерируемые строки, которые даже не являются маршрутами Синатры?
- Как мне избавиться от этой проблемы?
Спасибо.
РЕДАКТИРОВАТЬ 29.08.2018: Оказывается, Синатра / Мустерманн блокировали эти строки, потому что они были маршрутами.Основной метод создания динамических маршрутов статей был таким:
articles = []
Dir.glob('articles/*.mdown') do |file|
article = initialize_article file
if article.ready?
get("/#{article.url}") do
erb :'articles/article',
:locals => { :article => article },
:layout => :'articles/layout_article'
end
articles << article
end
end
В улучшенной версии в блоке get
используется другой метод:
#articles.rb
articles = []
Dir.glob('articles/*.mdown') do |file|
article = initialize_article file
if article.ready?
get("/#{article.relative_path}") do
erb :'articles/article',
:locals => { :article => article },
:layout => :'articles/layout_article'
end
articles << article
end
end
Определения методов:
#blog.rb
def relative_path
meta('relative_path')
end
def url
[Tir::Config.domain, meta('relative_path')].join
end
Так что теперь метод url
никогда не вызывается на маршруте, только на объекте articleт в одном из представлений - следовательно, без ошибок.