2011-04-14 55 views
1

我希望用户能够上传图片以用作其个人资料背景(用户#显示)。查看具有该功能的某些网站(例如Twitter)的源代码,似乎为用户分配了一个html正文标记,并且该正文标记的相应CSS背景图像链接到了他们上传的图像。用户上传的背景?

任何想法,我可以做到这一点? (注意:我目前使用回形针进行图片上传,但会将其与Amazon S3 /类似服务集成)

我想过从我的用户控制器向CSS文件/脚本注入一个ruby实例变量,以便它将是动态的,但我不知道这是否可能。可能有更好的方法。

回答

6

我已实施项目中的类似的东西。我将阐述这个概念并给出一个代码示例。我会让你理解逻辑或者采取一些代码示例来适应你的系统实现。

我会用这个帮手。

应用程序/视图/布局/ application.html.erb

<head> 
    ... 
</head> 
<body style="<%= show_user_bg %>"> 
    ... 
</body> 

应用程序/佣工/ application_helper.rb

module ApplicationHelper 
    def show_user_bg 
    "background:transparent url(#{@user.background_image}) no-repeat fixed left top;" 
    end 
end 

只要确保你的用户模型有background_image列和这个设置。

使用助手使其更加动态和更清洁。例如,您可以投入条件:

module ApplicationHelper 
    def show_user_bg 
    # Show user background 
    if user_signed_in? 
     "background:transparent url(#{@user.background_image}) no-repeat fixed left top;" 
    # Otherwise, show a default background image 
    else 
     "background:transparent url('/images/default_bg.png') no-repeat fixed left top;" 
    end 
    end 
end 

希望有所帮助!

+0

非常感谢您的帮助!工作完美,有没有什么办法可以为用户页面设置默认背景?没有任何背景图片上传用户配置文件的背景为白色,但对于所有其他页面,您的“其他”页面会出现,并且会出现默认背景 – ahuang7 2011-04-15 01:39:04

+0

在帮助程序中,您可以添加其他条件以检查@ user.background_image.blank?如果是,则显示默认背景图像。试一试 :-) – 2011-04-15 06:42:41

0

有很多种方法可以做到这一点。我见过谷歌搜索页面。它在html主体的底部添加了一个图像标签,其绝对位置为0,0,并将索引设置为-2。

另一种方法是,在身体和你的主div的背景图片,你可以做到这一点使用内联CSS属性像

<body style="background-image: 'url(<%= user_image -%>)'"> 

其中user_image是计算的背景图像的URL为当前用户的一个辅助方法,这应该也处理默认图像,即如果用户没有选择任何图像,那么它应该返回一个默认图像,可能是一个透明的图像。

1

由于它与数据相关,因此我只是在视图中使用内嵌式样式。

假设控制器已经加载模型实例为@profile有叫background_image,回形针附件属性...

<body style="background-image:url(<%= @profile.background_image.url %>)"> 
    ... 
</body>