【问题标题】:Making the logo interchangeable. Should I do it through the scss.erb or in the applications layout?使徽标可互换。我应该通过 scss.erb 还是在应用程序布局中执行此操作?
【发布时间】:2012-04-13 14:58:42
【问题描述】:

我正在尝试使我的 rails 应用程序的徽标可互换,请参阅上一篇文章 here

我有一个 Logo 模型,它具有以下字段 name:string, image:string, default:boolean

我正在使用 carrierwave gem 将图像上传到 image:string 列。
app/models/logo.rb

class Logo < ActiveRecord::Base
mount_uploader :image, LogoUploader
scope :default, where(default: true)

def falsify_all_others
  Logo.where('id != ?', self.id).each do |item|
    item.default = false
    item.save
    end
  end
end

我有一个徽标控制器,请参见此处
app/controllers/logos_controller.rb

class LogosController < ApplicationController
def new
  @logo= Logo.new
end

def create
  @logo = Logo.new(params[:logo])
  if @logo.save
    @logo.falsify_all_others
    redirect_to logos_path, :notice => "Logo has been uploaded successfully"
  else
  render "new"
  end
end

def edit
  @logo = Logo.find(params[:id]) 
end

def destroy
  @logo = Logo.find(params[:id])
  @logo.destroy
  flash[:notice] = "Logo has been obliterated!"
  redirect_to logos_path
end

def update
  @logo = Logo.find(params[:id])

  if @logo.update_attributes(params[:logo])
    @logo.falsify_all_others
    flash[:notice] = "Logo has been changed successfully!"
    redirect_to logos_path
  else 
    flash[:alert] = "Logo has not been updated."
    render :action => "edit"
  end
end

def show
  @logo = Logo.find(params[:id])
end

def index
  @logos = Logo.all
end 
end

和我的应用程序控制器

app/controllers/application_controller.rb

before_filter :get_logo

def get_logo
  @logo_default = Logo.default
end

所以,一旦他们通过carrierwave创建/上传了一些图像,我会显示这样的徽标: app/views/logos/show.html.erb

<%= image_tag @logo.image_url.to_s %>

我想添加默认徽标(通过我的徽标范围找到)以显示在主页上。现在,通过这段代码通过 app/assets/stylesheets/styles.scss.erb 完成

section#header {
height: 220px;
position: relative;
h1 {
    background-image: url('<%= asset_path 'logo.png' %>');
    position: absolute;
    width: 412px;
    height: 188px;
    z-index: 999;
}

所以我的问题是:我是否需要将显示徽标的代码从 scss.erb 中提取并添加到 app/views/layouts/application.html.erb,或者我可以在scss?比如用 image_tag 替换asset_path,或者类似的东西?如果您需要更多信息/代码,请告诉我,我很乐意提供...提前致谢

【问题讨论】:

    标签: ruby-on-rails ruby sass carrierwave


    【解决方案1】:

    我建议不要将它放在 scss 中,因为您可能希望在生产中预编译所有这些静态内容。

    【讨论】:

    • 你能告诉我更多你的意思'因为你可能想在生产中预编译所有这些静态的东西'我不应该在 css 中放置任何图像吗?
    • 静态图片完全没有问题。但是如果我没听错的话,你想替换这个图像,所以它不应该是(如果预编译的)静态文件的一部分。如果您想阅读有关预编译的信息,请参阅this link。除此之外,即使你真的要动态替换样式表中的图片,客户端也无法缓存你的css,所以我认为把它放在你的视图中是正确的方法。
    猜你喜欢
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 2012-03-12
    • 2015-06-11
    相关资源
    最近更新 更多