У меня есть такие модели STI: Photo < Medium
и Video < Medium
. Где-то в представлении я хотел бы показать их так:
# app/views/albums/show.html.slim
ul
li= render @album.media
render
поиск частичного albums/_photo
или albums/_video
:
# app/views/albums/_photo.html.slim
h3= photo.title
= image_tag photo.file.url
p= photo.description
# app/views/albums/_video.html.slim
h3= video.title
= video_tag video.file.url
p= video.description
Теперь я хотел бы создать шаблон для использования в app/views/albums/show.html.slim
, чтобы не повторять общие поля между носителями. Что-то подобное :
# app/views/albums/_medium.html.slim
h3= medium.title
= yield(:medium_tag)
p= medium.description
= yield(:medium_additionnals)
# app/views/albums/_photo.html.slim
- content_for(:medium_tag) do
= image_tag photo.file.url
- content_for(:medium_additionnals) do
# any additionnals fields
# app/views/albums/_video.html.slim
- content_for(:medium_tag) do
= video_tag video.file.url
- content_for(:medium_additionnals) do
# any additionnals fields
Но это дает мне конкатенацию содержимого...
У кого-то есть решение/альтернатива для этого?
[РЕДАКТИРОВАТЬ]
С этими шаблонами:
# app/views/albums/show.html.slim
= render @album.media
# app/views/albums/_medium.html.slim
div
h3= medium.title
= yield(:medium_tag)
# app/views/albums/_photo.html.slim
- content_for(:medium_tag) do
| TEST
Полученный HTML:
<div>
<h3>Photo1</h3>
TEST
</div>
<div>
<h3>Photo2</h3>
TESTTEST
</div>
<div>
<h3>Photo3</h3>
TESTTESTTEST
</div>
<div>
<h3>Photo4</h3>
TESTTESTTESTTEST
</div>
...
Результат yield объединяется столько раз, сколько раз носитель.