Rails 4和Turbolinks - Meta标签不变

vla*_*iov 12 ruby-on-rails turbolinks ruby-on-rails-4

我有一个启用了turbo-links的Rails 4应用程序,但是在更改页面时我无法刷新元标记(不是完全刷新).我读到在加载turbo-links的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"
Run Code Online (Sandbox Code Playgroud)

助手/ application_helper.rb

def meta_tag(标题,描述)

content_for :meta_keywords do
  title
end

content_for :meta_description do
  description
end   
Run Code Online (Sandbox Code Playgroud)

结束

这就是我称之为的方式

= meta_tag('here s my title', 'and the keywords')
Run Code Online (Sandbox Code Playgroud)

谢谢

Car*_*III 21

Turbolinks如何运作

Turbolinks旨在使<head>标签保持相同,并且仅<body>通过AJAX请求将标签替换为所请求页面的内容.由于您的<meta>代码位于<head>,因此不会通过Turbolinks请求更改它们.

SEO怎么样?

从SEO的角度来看,您不必担心<meta>Turbolinks请求上的标签会被更新,因为搜索引擎抓取工具将始终执行完整页面请求,并且不会执行Turbolinks javascript.

从用户的角度来看,<head>每个请求需要更改的唯一标记是<title>标记,因此Turbolinks本身内置了特殊处理.

这种行为会改变吗?

这个"问题"已被提出并被击落几次,每次被DHH自己宣布为非问题,所以我不会指望这种行为很快就会改变.

看到:


Ric*_*eck 2

这是 TurboLinks 的问题

根据设计,Turbolinks 基本上保持<head>页面的相同,并且<body>如果要保持相同(您使用相同的控制器/操作),则通过 ajax 调用文档的 。维持应用程序性能是一件疯狂的事情

这是Turbolinks 的一个很好的解释


我在 Javascript 中遇到了类似的问题,并且能够使用Jquery-Turbolinks gem 来保持 JS 渲染

对于你的元标签,虽然我不知道解决方案,但我设法找到了一个不错的宝石,你可能会从中受益:MetaMagic。它允许您在视图中定义元标记,有点像 content_block 工具的工作方式。这应该在每个 http 请求上加载