2015-08-23 14 views
8

Ho un'app web in cui ho anche un tipo di blog piuttosto complesso. Per questo blog uso sia RedCarpet come linguaggio di markup che un linguaggio di markup fatto in casa, che è molto utile.Rails: rendering visualizzazione contenuto in post-processore (problemi modello/helper)

Nel mio linguaggio di marcatura in casa chiamo le viste prodotto e altri parziali dall'app. Lo uso in due diversi modelli: BlogPost e articolo.

Ad esempio, un post di un blog potrebbe essere qualcosa di simile:

@blog_post.unprocessed_content = "Today I would like to show you this **cool** product that we offer: [[PRODUCT#ID:123]]." 

Il [[Prodotto # ID: 123]] è la mia propria linguaggio di markup e fresco è RedCarpet. Utilizzo un metodo render_content da ApplicationHelper simili:

processed_content = render_content(@blog_post.unprocessed_content) 

che sarebbe uscita

processed_content = "Today I would like to show you a <strong>cool</strong> product that we offer: <h3>Apple</h3><img src="apple.jpg"><p>Apple is a nice fruit.</p>. Price: 1 USD." 

La parte "mela" è prelevato da una vista-parziale.

Il metodo in ApplicationHelper utilizza per esempio: - rendono parziali/blog_post/product_item_with_pic - RedCarpet markup

scrivo tutti gli articoli/post di blog in uno stato di markup/non trasformati, ma avrebbe senso totale a pre -processo questo contenuto quando pubblico e ho caricato rendering_content() su :before_save.

Il problema

In sostanza, vorrei utilizzare che: before_save dal BlogPost e all'articolo modello ma poi ho incontrato il problema di cercare di fare cose aiutante da all'interno di un modello e tutto diventa disordinato .

Ho cercato di usare:

ApplicationController.helpers.render_content(@blog_post.unprocessed_content) 

ma poi non riesce a trovare il view-parziali come/blog_post/product_item_with_pic. Sembra che continuerei a sbattere contro problemi come questo.

In questo momento, ho una soluzione MOLTO brutta (che funziona) ed è necessario che la pre-elaborazione venga eseguita nella vista quando viene caricata la vista. Fondamentalmente, in admin :: blog_post # show chiamo render_content e poi eseguo un salvataggio. Sì, è brutto.

Le mie domande

  1. quello che sarebbe il più elegante modo per risolvere questo?
  2. Se non c'è davvero un buon modo, almeno, come posso accedere ai parziali quando chiamo ApplicationHelper in questo modo dal modello?
+0

Non è abbastanza chiaro cosa faccia effettivamente il tuo 'render_content'. – EugZol

+0

Hai assolutamente ragione, non era molto chiaro. L'ho modificato ora. – Christoffer

risposta

2

Non sono sicuro di aver capito completamente quello che vuoi. Tuttavia, per utilizzare le funzionalità di rendering della vista di Rails al di fuori del flusso standard, è necessario utilizzare la gemma render_anywhere.

require 'render_anywhere' 

class Article < ActiveRecord::Base 
    include RenderAnywhere 
    class RenderingController < RenderAnywhere::RenderingController; end 

    before_save :process_content 
    attr_reader :content 

    private 

    def process_content 
    # This variable will contain resulting HTML 
    @content = render(template: 'articles/article', layout: 'articles') 
    end 
end 

Leggi la brief documentation per informazioni su come rendere aiutante disponibile all'interno del vostro renderer.

+0

Sì, ho letto di nuovo la mia domanda e non è stato molto chiaro. L'ho risolto, ho risolto la tua soluzione e con un bel po 'di regolazione delle mie funzioni ha funzionato. Grazie! – Christoffer

Problemi correlati