ruby-on-rails-3 - español - ruby on rails tutorial pdf
¿Cómo puedo renderizar parciales automáticamente usando rebajas en Rails 3? (8)
Quiero tener algunos de mis parciales como fragmentos de rebajas. ¿Cuál es la forma más sencilla de renderizarlos utilizando los rieles estándar erb con plantillas?
Idealmente, me gustaría hacer algo como esto:
Si tengo un parcial en la aplicación / views / _my_partial.md.erb :
My awesome view
===============
Look, I can **use** <%= language %>!
al cual hago referencia desde una vista como esta:
<%= render "my_partial", :language => "Markdown!" %>
Quiero obtener un resultado que se vea así:
<h1>My awesome view</h1>
<p>Look, I can <strong>use</strong> Markdown!</p>
Acabo de lanzar una gema markdown-rails , que maneja .html.md
vistas .html.md
.
Sin embargo, no puede encadenarlo con Erb, es solo para vistas estáticas y parciales. Para incrustar el código de Ruby, debes usar la solución de tjwallace con :markdown
.
Al acumular las soluciones ya presentadas, esta es una vía de interpolación en Rails 3 para renderizar un archivo Markdown puro en una vista desde un parcial sin sangría innecesaria usando Haml''s :markdown
filtro de reducción y la gema RDiscount. La única pega es que su archivo Markdown es un archivo Haml, pero eso no debería importarle a alguien como una copiadora.
En Gemfile :
gem ''rdiscount''
En la aplicación / views / my_page.html.haml
:markdown
#{render ''my_partial'', language: ''Markdown!''}
En app / views / _my_partial.html.haml
My awesome view
===============
Look, I can **use** #{language}!
Si no necesita la :language
variable de :language
pasada al archivo de rebajas, podría deshacerse completamente de que su rebaja sea un archivo Haml:
En la aplicación / views / my_page.html.haml
:markdown
#{render ''my_partial.md''}
En la aplicación / views / _my_partial.md
My awesome view
===============
Sorry, cannot **use** #{language} here!
¿No te gustan esos molestos guiones bajos en tus archivos de Markdown?
En la aplicación / views / my_page.html.haml
:markdown
#{render file: ''my_markdown.md''}
En app / views / my_markdown.md
My awesome view
===============
Sorry, cannot **use** #{language} here!
Aprovechó su respuesta para hacer una gema para renderizar para GitHub Flavoured Markdown in Rails (a través de HTML :: Pipeline): https://github.com/afeld/html_pipeline_rails
Aquí hay una versión similar a la de @ Jacob pero usando Redcarpet .
module MarkdownHandler
def self.erb
@erb ||= ActionView::Template.registered_template_handler(:erb)
end
def self.call(template)
options = {
fenced_code_blocks: true,
smartypants: true,
disable_indented_code_blocks: true,
prettify: true,
tables: true,
with_toc_data: true,
no_intra_emphasis: true
}
@markdown ||= Redcarpet::Markdown.new(RedcarpetHeaderFix, options)
"#{@markdown.render(template.source).inspect}.html_safe"
end
end
ActionView::Template.register_template_handler :md, MarkdownHandler
Todo el crédito para lencioni que publicó esto en esta esencia .
Y si quieres evaluar erb:
erb = ERB.new(template.source).result
@markdown ||= Redcarpet::Markdown.new(RedcarpetHeaderFix, options)
"#{@markdown.render(erb).inspect}.html_safe"
Han encontrado la manera de no usar haml en tal situación.
en views / layouts / _markdown.html.erb
<%= m yield %>
en la aplicación / helpers / application_helper.rb
def m(string)
RDiscount.new(string).to_html.html_safe
end
en Gemfile
gem ''rdiscount''
Entonces, a la vista puede llamarlo así:
<%= render :partial => "contract.markdown", :layout => ''layouts/markdown.html.erb'' %>
Y contract.markdown se formateará como markdown
No es una solución de descuento puro, pero puede usar filtros HAML para renderizar, así como otros lenguajes de marcado.
Por ejemplo, en app/views/_my_partial.html.haml
:
:markdown
My awesome view
===============
Look, I can **use** #{language}!
Puede usar el marcado incrustado en Rails 5. El descuento incrustado se basa en la solución proporcionada por Jacob above
Agregue estas dos líneas al Gemfile de su aplicación:
gema ''redcarpet'' gema ''emd''
paquete de instalación.
Luego, cree una vista
app/view/home/changelog.html.md
y pegue su.md
en ese archivo.md
.Genera un controlador de casa usando el siguiente comando
rails generate controller home
En su route.rb, agregue esta línea:
get ''/changelog'', :to ''home#changelog''
Eso es todo. Visita http://localhost:3000/changelog para ver tu rebaja renderizada
Fuente: http://github.com/ytbryan/emd
Resulta que la forma correcta (tm) para hacer esto es usar ActionView::Template.register_template_handler
:
lib / markdown_handler.rb :
require ''rdiscount''
module MarkdownHandler
def self.erb
@erb ||= ActionView::Template.registered_template_handler(:erb)
end
def self.call(template)
compiled_source = erb.call(template)
"RDiscount.new(begin;#{compiled_source};end).to_html"
end
end
ActionView::Template.register_template_handler :md, MarkdownHandler
Si require ''markdown_handler''
en su config/application.rb
(o un inicializador), cualquier vista o parcial se puede representar como Markdown con interpolación ERb utilizando la extensión .html.md
:
app / views / home / index.html.md :
My awesome view
===============
Look, I can **use** <%= @language %>!
app / controllers / home_controller.rb :
class HomeController < ApplicationController
def index
@language = "Markdown"
end
end