Rails 成员路由中断 Rails 5.1 中的布局

Rails Member Route Breaks Layout in Rails 5.1

我有一个名为 "claims" 的 rails 控制器和一个名为 "addservice" 的动作。 如下图

class ClaimsController < ApplicationController
  before_action :set_claim, only: [:show, :edit, :update, :destroy]

  layout 'dashboard'

  def addservice
  end

  def new
  end
end

然后在我的 route.rb 文件中我有以下路线

resources :claims do 
  member do 
    get 'addService'
  end 
end 

但问题是每当我在

访问 addservice 路线时

localhost:3000/claims/1/addservice

例如,我的仪表板布局中的静态资产链接中断了。从终端我看到资产链接现在命名空间如下所示,在实际位置之前添加了一个新的 'claims' 目录,导致静态文件的链接中断。

ActionController::RoutingError (No route matches [GET] "/claims/asset/plugins/style/css/style.css"):

当我访问 claims controller 和其他控制器中的新操作时,它正常工作,但从未用于命名空间路由。

我的 dashboard.html.erb 布局文件中的链接如下所示:

<link href="../asset/plugins/style/css/style.css" rel="stylesheet">
<link href="../asset/plugins/css/bootstrap-extension.css" rel="stylesheet">      

使用这个:

<%= stylesheet_link_tag 'application', media: 'all'%>

并在您的 app/assets/stylesheets/application 中需要此资产。css 在此文件中,您将归档以下文档:

This is a manifest file that'll be compiled into application.css, which will include all the files listed below. Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path. You're free to add application-wide styles to this file and they'll appear at the bottom of the compiled file so the styles you add here take precedence over styles defined in any styles defined in the other CSS/SCSS files in this directory. It is generally better to create a new file per style scope.

你的问题是像你这里那样使用相对路径是行不通的。

您必须从仪表板布局文件中删除这些样式表

<link href="../asset/plugins/style/css/style.css" rel="stylesheet">
<link href="../asset/plugins/css/bootstrap-extension.css" rel="stylesheet">

现在您可以在 app/assets/stylesheets 目录中创建一个新的 css 文件

# app/assets/stylesheets/dashboard.css

/*
*= require dashboard/style
*= require dashboard/bootstrap-extension
*/

现在您可以在 app/assets/stylesheets 目录中创建一个仪表板目录,并将这些文件放在仪表板目录中。

现在将仪表板 css 文件添加到资产预编译的资产初始值设定项

# config/initializers/assets.rb
Rails.application.config.assets.precompile += %w( dashboard.css )

将仪表板 css 文件添加到仪表板布局 -

# app/views/layouts/dashboard.html.erb  
<%= stylesheet_link_tag 'dashboard', media: 'all'%>

希望它有用。