【问题标题】:Rails Meta Tags, undefined method `set_meta_tags' in Rails 4Rails 元标记,Rails 4 中未定义的方法“set_meta_tags”
【发布时间】:2015-10-17 22:44:51
【问题描述】:

使用宝石Meta Tags

documentation 声明将其放入控制器中:

set_meta_tags :title => 'Member Login',
              :description => 'Member login page.',
              :keywords => 'Site, Login, Members'

但是,这就是我所做的,不确定我是否需要在它周围包裹一些东西:

class ApplicationController < ActionController::Base
  rescue_from CanCan::AccessDenied do |exception|
    redirect_to main_app.root_path, :alert => exception.message
  end   
  protect_from_forgery with: :null_session
  before_filter :configure_devise_params, if: :devise_controller?

  set_meta_tags :og => {
                    :title    => 'The Rock',
                    :type     => 'video.movie',
                    :url      => 'http://www.imdb.com/title/tt0117500/',
                    :image    => 'http://ia.media-imdb.com/rock.jpg',
                    :video    => {
                      :director => 'http://www.imdb.com/name/nm0000881/',
                      :writer   => ['http://www.imdb.com/name/nm0918711/', 'http://www.imdb.com/name/nm0177018/']
                    }
                  }
end

那么在我看来:

<%= display_meta_tags %>

但我收到了错误undefined method 'set_meta_tags'

【问题讨论】:

  • 如果您从控制器中使用它,那么至少在action 中定义它,如果没有方法,您将永远得不到任何东西。或者在视图中使用它们。
  • @Deep 你好!所以假设我希望在所有页面上都使用这个元标记,我们只是把它放在一个动作中,但是如果我们调用那个动作,它就行不通了,对吗?我怎么称呼那个动作?我认为有一个之前的方法?但我不确定它到底是什么......或者我想错了吗?也许把它放在before_filter :some_action
  • @Deep 刚刚尝试了before_filter,但出现错误:stack level too deep
  • 那么为什么不在布局中使用呢?

标签: ruby-on-rails ruby ruby-on-rails-4 meta-tags


【解决方案1】:

我通常将它放在应用程序控制器中以保持视图整洁。

# app/config/application.rb

# ...

before_action :please_set_meta_tags

def please_set_meta_tags
  set_meta_tags title:       'website name',
                description: 'website description',
                og: {
                  title:     'website name',
                  type:      'website',
                  url:       request.original_url,
                  image:     { _: view_context.image_url('myimage1.jpg'), width: 1200, height: 630 },
                             { _: view_context.image_url('myimage2.jpg'), width: 1200, height: 630 }
                }
end
# ...
# app/views/layouts/application.html.erb

...
<head>
  <%= display_meta_tags %>
  ...

我使用view_context.image_url() 而不是image_url() 来获取图像,因为我不在视图中(因此需要view_context)。

记得安装 gem 后重启服务器! (可能太明显以至于你忘记了)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多