2014-01-21 36 views
0

我使用Paperclip在Rails 3.2应用程序中进行图像上传。 目标是在用户每次上传自己的图像之前创建一个新帖子,一个不同的(随机更改的)默认图像。Rails - 回形针 - 设置随机更改默认图像

我在这里发现了thisthis问题,但不幸的是这些解决方案对我不起作用。

这是post.rb模式

has_attached_file :image, styles: { medium: "320x240>"} 
validates_attachment :image, 
content_type: { content_type: ['image/jpeg', 'image/jpg', 'image/png'] }, 
size: { less_than: 2.megabytes } 

belongs_to :user 
has_attached_file :image, styles: { thumb: "100x100", small: "160x120", medium: "320x240>", large: "640x480", fullscreen: "1000x300#" }, 
:default_url => '/assets/1.jpg' 

相反:default_url => '/assets/1.jpg'我想设置的东西,展示随机十一个图像(1.JPG到10.JPG)。

如果我尝试使用:default_url => lambda {'/assets/#{rand(5)}.jpg'}我得到这个错误: 引发ArgumentError在帖子#新 - 错误的参数数目(1 0)

回答

2

的问题是,做你想要什么,回形针必须支持lambda表达式DEFAULT_URL。
考虑,我认为它没有(但我不知道,我以前看过一些关于它很多的时间),我建议你采取“简单的路线”,即使感觉不太正确的(但不那么多)。随着视图和一个帮手,做这样的事情:

post_helper.rb

module PostHelper 

    def post_image_url(post) 
    return post.image.url if post.image.exists? 

    number_between_0_and_3 = rand(4) 

    "my_random_image_#{ number_between_0_and_3 }.jpg" 
    end 

end 

my_view.html.erb

<%= image_tag(post_image_url(@post), alt: 'Dunno') %> 

如果你在你的应用程序/资产/ images这4个文件:

  • my_random_ image_0.jpg
  • my_random_image_1.jpg
  • my_random_image_2.jpg
  • my_random_image_3.jpg

其中之一将被随机地选择每一次。

重要通知:我没有测试代码,所以你可能会发现一些小错误,但这个想法,如果你认为它是伪代码,没问题。无论如何,我很确定它会起作用。

重要提示2:这将每次您访问的页面更改用户图像

如果你想创建一个永久性的跨页面用户的随机图像,你可能想要这种方法:基于用户ID(这是“随机”或多或少),你可以简单地替换你的帮手与此:

post_helper。RB

module PostHelper 

    def post_image_url(post) 
    return post.image.url if post.image.exists? 

    # Here is the change, you must ensure post.user is always present anyway! 
    number_between_0_and_3 = post.user.id % 4 

    "my_random_image_#{ number_between_0_and_3 }.jpg" 
    end 

end 

这将授予用户根据ID my_random_image_0.jpg和my_random_image_3.jpg之间的随机图像,这样就不会跨页改变,但它仍然是伪随机。

此外,如果用户检查他的个人资料,则头像图像将变为空而不是在那里显示图像(因此用户知道他必须添加头像,更好的用户体验)。

+0

非常感谢您的快速回复!你提出了一个“view.html.erb”的建议 - 但是我该怎么写post.rb模型,而不是:default_url =>'/assets/1.jpg'?我可以删除它吗? – YvonC

+0

@YvonC:你可以做到这两点,我建议你永远有一个默认的网址,所以保持它,即使你根本不使用它。另请看看我的编辑有哪些改进 –

+0

真棒,谢谢!工作正常。让我的一天! – YvonC