2016-12-03 2 views
1

У меня есть ссылка, которую я хочу показать в наборе сухарей (используя Slime для разметки).Phoenix: функция Interpolate в строке в шаблоне

= link(@project.name, to: project_path(@conn, :show, @project)) 

Это делает штраф. Но я хочу показать это в контексте, с другими ссылками.

# by concatenation 
= link("Projects > ", to: project_path(@conn, :index)) <> link(@project.name, to: project_path(@conn, :show, @project)) 

# or by interpolation 
#{link("Projects", to: project_path(@conn, :index))} > #{link(@project.name, to: project_path(@conn, :show, @project))} 

Нужный результат будет выглядеть примерно так:

Projects > Название проекта

Ни один из этих методов работы, однако. Как я могу добавить эту ссылку в этот текст?

Бонусные баллы, если вы можете объяснить, почему это не работает, как указано выше.

+0

Почему вы не положить их в разных строках? '= link (...) \ n | > \ n = ссылка (...) '? – Dogbert

+0

Interpolation предлагает намного больше контроля и ясности, я думаю, но я вижу вашу точку зрения – steel

ответ

2

Просто сделайте это многострочный:

= link("Projects > ", to: project_path(@conn, :index)) 
= link(@project.name, to: project_path(@conn, :show, @project)) 

Вы все еще можете поместить его в одну строку:

link функция возвращает кортеж, как это: {:safe, "link_string"}. Если вы хотите использовать ссылку в виде строки, вам нужно выбрать второй элемент из кортежа через Kernel.elem (tuple, 1). See what content_tag (which is used in link()) returns.

Также вам нужно отобразить любые html-теги с помощью raw().

Это работает:

= raw "#{Kernel.elem(link("Projects > ", to: project_path(@conn, :index)), 1)} #{Kernel.elem(link(@project.name, to: project_path(@conn, :show, @project)), 1)}"