我的Rails路线之一,要求发送favicon.ico

时间:2019-02-11 15:10:31

标签: ruby-on-rails

我刚刚将resources: :favorites嵌套在resources: :deals中的内容添加到了我的Rails应用程序中。突然,deals/deal_slug/favorites/new呈现后,访问deals/favicon.ico发出GET请求,这当然会激活show路由,但找不到{ {1}}。

似乎仅是引起此请求的favicon.ico路线,并且我尝试注释掉favorites/newfavoritescontroller#new视图的全部,而没有任何改变。 / p>

在我的new中注释link href="../../favicon.ico" rel="icon"可以解决此问题,但是我很乐意将其保留在我的布局中,并弄清楚为什么这个问题刚刚开始!

我的路线文件:

layout

FavoritesController:

Rails.application.routes.draw do

  # what are these??
  get 'regions/index'
  get 'regions/show'

  root "deals#index"

  resources :deals, param: :slug do
    resources :favorites
  end
  resources :favorites

  get 'my-deals', to: 'deals#my_deals', as: :my_deals_path
  resources :regions, param: :slug, only: [:index, :show] do
    resources :deals, only: [:index, :show], param: :slug
    # resources :deals, only: [:index, :show, :edit, :destroy]
  end

  resource :preferences
  ActiveSupport::Inflector.inflections {|inflect| inflect.irregular 'preferences', 'preferences'} # fix route helper paths so that form_for works
  get '/preferences/delete_airport/:airport_id', to: 'preferences#destroy', as: 'delete_home_airport'

  resources :vacations

  get 'pry', to: 'application#pry'

  # ------- DEVISE STUFF --------

  devise_for :users, controllers: { 
    omniauth_callbacks: 'users/omniauth_callbacks', 
    preferences: 'users/preferences',
  }

  devise_scope :user do 
    get "/sign_out", to: 'devise/sessions#destroy', as: 'user_sign_out'
    get "/sign_in", to: 'users/sessions#new', as: 'user_sign_in'
    get "/sign_up", to: 'devise/registrations#new', as: 'user_sign_up'
    get "/user/preferences", to: 'users/preferences#index', as: 'user_preferences'
    get "/user/preferences/edit", to: 'users/preferences#edit', as: 'edit_user_preferences'
    patch "/user/preferences/:id/edit", to: 'users/preferences#update'
  end

  devise_for :admins, path: 'admin', controllers: { sessions: 'admins/sessions' }

  devise_scope :admin do
    get "/admin", to: 'admins/sessions#portal', as: 'admin_root'
    get "/admin/sign_out", to: 'devise/sessions#destroy', as: 'admin_sign_out'
  end

end

1 个答案:

答案 0 :(得分:0)

对图标图标的请求是由浏览器发出的,您的代码不会触发该请求。

问题是您的favicon href,它是相对于当前路径:“ ../../favicon.ico”,而不是绝对的“ /favicon.ico”。如果您有其他路线的级别超过2,则会遇到同样的问题。

您应该在公用文件夹上的某个位置添加favicon.icon,并使用绝对路径指向它。如果图标位于/public/favicon.ico中,则使用href="/favicon.ico"配置布局的图标图标,如果您将图标放在/public/icons/favicon.ico之类的其他位置,则将链接标签更改为href="/icons/favicon.ico"