2010-08-06 123 views
8

我正在寻找其他人如何组织他们的多态资源部分。为多态资源组织部分

例子:

我有Image这是多态和取决于什么是imageable,我想显示的东西略有不同。

我有一个部分images/_image,可以拨打render imageable.images。我目前的想法是让我的图像部分检查imageable是什么类型,然后再有另一部分,特定于该情况。我的组织是沿着线的东西:

images/ 
    _image.html.haml 
    _product.html.haml 
    _post.html.haml 
    _user.html.haml 

_image部分看起来是这样的:

%div 
    = render :partial => "images/#{imageable.type}" 

这看起来像一个不错的办法,或平出错误的做法?我认为从任何地方拨打render imageable.images会比在各地拨打render :partial => ...好得多。

任何想法将不胜感激。你是怎么做到的?

编辑:很长一段时间过去了,我仍然想知道如果任何人有任何输入。抛出赏金,看看是否吸引了一些注意力。

回答

1

我有点在天气之下,所以我无法测试它。但是你应该放入<%= render imageable.images %>,看看它说什么。它应该工作,因为它应该使用.modelname或.class :)如果它不起作用,我会做你正在做的,如上所述。如果它不起作用,请评论它所说的话,因为那么我可能会为rails核心做一个补丁,真的应该这样工作。

+0

嗨穆罕默德,谢谢你的回应。可以说,我应该用主观来标记我的问题(这可能会使我的赏金有点尴尬)。但是,是的,正如你所指出的那样,它确实能够工作。就人们如何处理这些事情而言,我的问题更主观。我组织这些文件的方式对我来说似乎总是“肮脏”,并且正在寻找对其他人如何做到这一点的深入了解。干杯。 – theIV 2011-05-21 20:13:42

+0

我会这样做'<%= render resource%>'它更干净imo。虽然我可能不知道它会成为蝙蝠的多态部分权利,但是找到它并不难,因为它们都在那里,更糟糕的情况是只需在线上添加注释或其他内容:) – 2011-05-21 20:57:19

1

我认为你最初的想法是正确的轨道上,有一个小的调整:

= render imageable.images 

# images/_image.html.haml 
= render image.imageable_type.underscore, :object => image.imageable, :image => image 

# images/_product.html.haml 
// Custom code for product image (with product and image local variables) 
2

在你的代码现在还不清楚的是_product实际上是一个_image

我认为Rails的目的是要做到这一点是这样的:

shared/ 
    _image.html.haml 
    imageable/ 
     _product.html.haml 
     _post.html.haml 
     _user.html.haml 

然后在_image部分你拨打:

render :partial => imageable/#{image.type}", :image => image

现在是从你的目录结构清楚什么你的多态性是。

(注:我用了shared目录,但ofcourse当你的图像部分是不实际视图之间共享应该是在某些视图目录一样,如果你确实有一个images_controller目录应该叫做images

2

我认为你有正确的方法,但我认为清洁的最后一步是消除选择另一个部分的图像部分,而不是将该行为交给帮手。就像是...

module ImagesHelper 
    def show_image(imageable) 
    render :partial => "images/#{imageable.class.to_s.tableize}" 
    end 
end