Re-usable template pattern - yield?

Hi all. I have something that’s like a helper and like a partial but
not quite either. Instead of typing this:

<% if (page = ComatosePage.find_by_path(“general/explore”)) ||
current_user.admin? %>



<%= page ? page.to_html : “Comatose article ‘general/explore’
not found” %>


<% end %>

I want to do something like this but i can’t get my head around quite
how to set it up:

<% comatose_article(“general/explore”) do |article| %>



<%= article %>


<% end %>

This is so i can use the same pattern of “if the article’s not there
show nothing at all, unless the current user is an admin in which case
show the ‘missing article’ message”, but with arbitrary html wrapped
around the actual article (in this case the arbitrary html is the
quarter and module divs)

grateful for any advice - max

On Jul 26, 1:55 pm, Max W. [email protected] wrote:

This is so i can use the same pattern of “if the article’s not there
show nothing at all, unless the current user is an admin in which case
show the ‘missing article’ message”, but with arbitrary html wrapped
around the actual article (in this case the arbitrary html is the
quarter and module divs)

A helper that yields is what you want. Have a look at the concat &
capture helpers too.

Fred

Frederick C. wrote:

On Jul 26, 1:55�pm, Max W. [email protected] wrote:

This is so i can use the same pattern of “if the article’s not there
show nothing at all, unless the current user is an admin in which case
show the ‘missing article’ message”, but with arbitrary html wrapped
around the actual article (in this case the arbitrary html is the
quarter and module divs)

A helper that yields is what you want. Have a look at the concat &
capture helpers too.

Fred

Thanks for the prod Fred. I knew it would be something using yield but
couldn’t quite get my head around it. It turned out to be simpler than
i thought:

def comatose_article(path)
if page = ComatosePage.find_by_path(path)
yield page.to_html
elsif current_user.admin?
yield “Couldn’t find ‘#{path}’ page”
end
end

Cheers, max