tutorial rails español ruby-on-rails-3 markdown partials

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!



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

  1. Agregue estas dos líneas al Gemfile de su aplicación:

    gema ''redcarpet'' gema ''emd''

  2. paquete de instalación.

  3. Luego, cree una vista app/view/home/changelog.html.md y pegue su .md en ese archivo .md .

  4. Genera un controlador de casa usando el siguiente comando

    rails generate controller home

  5. En su route.rb, agregue esta línea:

    get ''/changelog'', :to ''home#changelog''

  6. 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