【问题标题】:How to load CSS when updating a user record in Rails在 Rails 中更新用户记录时如何加载 CSS
【发布时间】:2016-08-15 09:00:16
【问题描述】:

我在客户端应用程序上使用设计进行身份验证。在广泛阅读 wiki 之后,我设法正确配置我的应用程序以满足我的需求。但是我有一个 CSS 加载问题。
我选择了允许管理员通过:confirmable 批准帐户的选项,因为我不熟悉结合:confirmable 和批准帐户。

我按照“How To: Require admin to activate account before sign_in”中的说明执行此操作,并按照“How to do browser-based new user approval by Admin in Rails 3.2 using Devise”中的说明在更新属性时帮助配置我的routes.rb 文件。

现在的问题是,当我单击链接以更新属性时,它会完美地执行此操作,但重定向回来后查找 CSS 的路径会发生变化。

为了澄清我的意思,假设我的 CSS 文件位于 public/user/mycss.css 中,当我使用 devise 登录时,它会正确加载,但在单击 link_to 标签时它会更新记录,但会通过查找 mycss.css users/:id/approve/mycss.css 参考第二个链接不存在。

我有一个管理模型,允许客户为博客创建帖子。身份验证系统完美运行。第一个链接中的设计 wiki 链接建议我列出所有用户并创建一个简单高效的方法来更新已批准的属性。在我的控制器中,我有以下代码:

def approve_admin
    admin = Admin.find(params[:id])
    unless admin.approved?
      admin.update_attribute :approved, true
      if admin.save
        flash[:notice] = "#{admin.first_name} approved"
      else
        flash[:alert] = "#{admin.first_name} approval failure"
      end
    end
    redirect_to :back
  end

在我看来,我使用了link_to 标记,它使用上述方法更新属性:

<% if !(admin.approved?) %>
  <p class="hvr-shutter-out-horizontal hvr-grow-shadow"><%= link_to "Approve", approve_admin_path(admin.id)  %></p>
<% end %>

在我的路线文件中,我有这个:

get 'admin/:id/approve', to: 'posts#approve_admin', as: 'approve_admin'

这可以完美运行,但是 CSS 和 JavaScript 文件无法加载。我检查了浏览器的错误,这是输出:

http://localhost:3000/admin/3/js/modernizr.custom.js

例如,而不是从

加载文件
http://localhost:3000/admin/js/modernizr.custom.js

为什么要通过该路径查找 CSS 文件?

【问题讨论】:

  • 文件路径在我看来就像您没有使用资产管道一样。那是对的吗?您将 css 文件存储在公共文件夹中的什么位置?如何链接布局文件中的 css 文件?
  • @spickermann 我将 css 文件存储在公用文件夹中。在我的布局文件中,我使用常规的 html 样式表链接来链接文件。
  • 似乎您在样式表标签中使用了相对 url。您可能想尝试使用绝对链接。
  • 请阅读“How to Ask”(包括链接页面)和“minimal reproducible example”。您要求我们想象您的 Rails 代码,这不容易完成,然后找出我们看不到的问题的解决方案。这不太可能运作良好。我们需要查看重复问题的最少代码以及任何支持输入数据和您的预期结果。另外,不要说“这个链接”和“这个链接”,而是总结这些链接的重要内容,然后参考这些页面。这样一来,链接失效并破坏您的问题时,对于那些寻找类似解决方案的人来说仍然有意义。
  • @theTinMan 感谢您在澄清问题方面为我指明了正确的方向。我已经更新了

标签: html css ruby-on-rails ruby devise


【解决方案1】:

根据进一步的研究,我想出了这个答案,对于在通过管理员批准用户进行设计时遇到问题的任何人来说,这可能是一个可能的解决方案。就我而言,我称他们为“管理员”。

在完成“How To: Require admin to activate account before sign_in”中的所有步骤后,我在相应的控制器中创建了一个方法来更新属性:

def approve_admin
    admin = Admin.find(params[:id])
    unless admin.approved?
      admin.update_attribute :approved, true
      if admin.save
        flash[:notice] = "#{admin.first_name} approved"
      else
        flash[:alert] = "#{admin.first_name} approval failure"
      end
    end
    redirect_to :back
  end

在我看来,我创建了一个更新属性的link_to 标记:

<% if !(admin.approved?) %>
  <p class="hvr-shutter-out-horizontal hvr-grow-shadow"><%= link_to "Approve", approve_admin_path(admin.id),method: :put  %></p>
<% end %>

在我的路线文件中,我这样做了:

put 'admin/:id/approve', to: 'posts#approve_admin', as: 'approve_admin'

我将get 更改为put,在我看来,我使用了method: :put。这告诉 Rails 无需在其他地方查找 CSS 文件即可更新记录。

【讨论】:

    猜你喜欢
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多