2010-08-06 3 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 => ... повсюду.

Любые идеи были бы весьма признательны. Как вы это сделали?

EDIT: Прошло много времени, и мне все еще интересно, есть ли у кого-нибудь какие-либо данные об этом. Бросайте щедрость, чтобы увидеть, привлекает ли это внимание.

ответ

1

Я немного под погодой, поэтому я не могу ее проверить. Но вы должны просто положить <%= render imageable.images %> и посмотреть, что он говорит. Он должен работать, потому что он должен использовать .modelname или .class :) Если он не работает, я бы сделал то, что вы делаете, как упоминалось выше. Если это не работает, пожалуйста, прокомментируйте, что он говорит, потому что тогда я, вероятно, сделаю патч для ядра rails для этого, действительно должен работать как таковой.

+0

Hi Mohammad, спасибо за ответ. Возможно, я должен пометить свой вопрос субъективным (что может сделать мою щедрость немного неудобной). Но, да, как вы уже указали, это определенно работает. Мой вопрос более субъективен в смысле того, как люди справляются с этими вещами. Способ, которым я организовываю эти файлы, всегда кажется мне «грязным» и искал немного больше информации о том, как это делают другие люди. Приветствия. – theIV

+0

Я бы сделал это '<% = render resource%>' это чище imo. Хотя я, возможно, не знаю, что это будет полиморфное частичное право на летучую мышь, это не так сложно узнать, так как они все там, а худший сценарий просто добавляют комментарий выше строки или что-то еще :) –

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, но конечно, если ваше изображение частичное не фактически разделяют между представлениями он должен быть в каком-то каталоге вид, как если бы вы на самом деле имеют images_controller каталог должен называться images)

2

Я думаю, что у вас есть правильный подход, но я думаю, что последний шаг к чистоте состоит в том, чтобы устранить частичные части изображения, которые выбирают другой частичный, вместо этого передают это поведение помощнику. что-то вроде...

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

?

Смежные вопросы