2011-05-11 54 views
4

我升级我的工作应用1.9.2,但无法找到答案如下:红宝石1.9.2拉姆达与回形针

我创建了一个资产,像这样在我的控制器:

@asset = Asset.new(params) 

,然后在我的模型使用lambda动态生成像这样的样式:

has_attached_file :asset, 
    :styles => lambda { |attachment| attachment.instance.choose_styles} 

然后我检查某个值,那是在我的PARAMS像这样:

def choose_styles 
    if self.item_name == 'Car' 
    { :small => ["200x200>"], :medium => ["400x400>"], :large => ["700x700>"], :full_screen => ["1000x700>"] } 
    else 
    ........ 
end 

问题是在1.9.2之前item_name是零,直到这已经运行,然后似乎从params中设置。这一切工作切换回1.8.7

是否有人可以看到帮助我的东西?

感谢 里克

+1

尝试另一种语法对于lambda,例如'Proc.new {... code ...}或1.9的“stabby”语法' - > {... code ...}' – RyanScottLewis 2011-05-18 22:10:38

+0

它应该在1.8.7和1.9.2。你确定没有其他区别吗?两种环境下的回形针宝石版本是否相同? Rails版本呢?其他插件可能不同? – 2011-09-19 22:07:49

+0

任何解决方案?我一直面对同样的问题。在我看来,样式过程被称为7次(在任何属性设置之前2次)。基于这个要点的结论:https://gist.github.com/4663975 – Marcelo 2013-01-29 12:50:48

回答

0

我知道这不是你的问题适合的答案。顺便说一句,您可以切换到载波(https://github.com/jnicklas/carrierwave)。您可以更细致地选择格式来创建各种版本并嵌套它们。

举个例子,一个ipothetic AssetUploader可能是:

... 
version :thumb_200x200 do 
    process :resize_to_fill => [200,200] 
end 

version :big_600x600 do 
    ... 
end 
... 
version :car, :if => in_category(:car)? 
    version :thumb_200x200 
    version :another_etc 
end 
... 
protected 
    def in_category?(name) 
    model.item_name.downcase == name.to_s 
    end 
... 

这仅仅是代码的例子,调整您的需求;)

欢呼声, A.