Rails 4 и Turbolinks - метатеки не меняются

У меня есть приложение Rails 4 с включенными турбо-ссылками, но я не могу обновить метатеги при изменении страницы (не полное обновление). Я прочитал, что метатеги должны быть включены перед javascript, который загружает турбо-ссылки, но не имеет никакого эффекта. Полное обновление выполняет эту работу, но, к сожалению, это не то, что я ищу.

Макет/application.html.haml

%html
  %head
    %title= "Title"
    - if content_for?(:meta_description)
      %meta{content: (yield :meta_description), name: "description"}/
      %meta{content: (yield :meta_keywords), name: "keywords"}/
    = stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true 
    = javascript_include_tag "application", "data-turbolinks-track" => true

    = csrf_meta_tags
  %body{class: params[:controller].gsub("/", "-"), id: 'top'}
    = render "shared/header"
    .body-content
      = render "shared/flash"
      = yield
    = render "shared/footer"
    = render "shared/analytics"

хелперы/application_helper.rb

def meta_tag (название, описание)

content_for :meta_keywords do
  title
end

content_for :meta_description do
  description
end   

конец

И вот как я их называю

= meta_tag('here s my title', 'and the keywords')

Спасибо

Ответ 1

Как работают Turbolinks

Turbolinks предназначен для сохранения тега <head> того же самого и просто заменяет тег <body> содержимым запрашиваемой страницы через запрос AJAX. Поскольку теги <meta> расположены в <head>, они не будут изменены с помощью запроса Turbolinks.

Как насчет SEO?

С точки зрения SEO вам не нужно беспокоиться о тегах <meta>, которые обновляются в запросе Turbolinks, потому что поисковые роботы всегда будут выполнять полный запрос страницы и не будут запускать javascript Turbolinks.

С точки зрения пользователя единственным тегом в <head>, который необходимо изменить для каждого запроса, является тег <title>, поэтому специальная обработка для этого была встроена в Turbolinks.

Будет ли это изменение изменяться?

Эта "проблема" была поднята и сбита пару раз, каждый раз объявляя себя не самой проблемой самим DHH, поэтому я не буду рассчитывать на то, что это изменение изменится в ближайшее время.

Смотрите:

Ответ 2

Это проблема с TurboLinks

По дизайну Turbolinks в основном сохраняет <head> вашей страницы одинаково и вызывает <body> вашего документа через ajax, если он останется прежним (вы используете один и тот же контроллер/действие). Это безумие для поддержания производительности приложений

Вот хорошее объяснение Turbolinks


У меня была аналогичная проблема с Javascript, и я смог использовать Jquery-Turbolinks для сохранения JS-рендеринга

Для ваших метатег, хотя я не знаю решения от руки, мне удалось найти достойный камень, который вам может пригодиться: MetaMagic. Это позволяет вам определять метатеги в представлении, вроде того, как работает объект content_block. Это должно быть загружено на каждый запрос http

Ответ 3

Я расширяю текущие турбонауки js;)

Он заменит метатеги и каноническую ссылку!

https://github.com/philklei/turbolinks