2015-08-23 19 views
8

Oldukça karmaşık bir blog türüne de sahip olduğum bir web uygulamasına sahibim. Bu blog için, ev yapımı işaretleme dilinin yanı sıra RedCarpet'i işaretleme dili olarak kullanıyorum, bu çok kullanışlı.Raylar: İşlem sonrası görüntü içeriğini göster (model/helper)

Ev yapımı işaretleme dilinde, ürün görünümlerini ve diğer kısmi uygulamaları çağırıyorum. Bunu iki farklı modelde kullanıyorum: BlogPost ve Makale.

Örneğin, bir blog yazısı olabilir gibi bir şey:

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

[[ÜRÜN # ID: 123]] Kendi biçimlendirme dili ve serin redcarpet olmasıdır. Bu gibi ApplicationHelper bir render_content yöntemi kullanın:

processed_content = render_content(@blog_post.unprocessed_content) 

olan çıktılayacaktır

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

"arka plan" kısmı, görüntüleme kısmi gelen getirilir.

ApplicationHelper yöntem örneğin kullanır: - işlemek Partials/blog_post/product_item_with_pic - redcarpet biçimlendirme

tüm yazı yazmak/blog bir işaretleme/işlenmemiş durumdaki mesajlar ama öncesi toplam mantıklı olur - Bu içeriği :before_save numaralı belgede yayınladığım ve render_content() yüklediğimde bu içerik.

Temelde sorun, bunu kullanmak istiyorum: blogpost dan before_save ve Madde modeli ama bir model içinde yardımcı şeyler yapmak çalışmakla sorunu çalıştırmak sonra ve tüm pis alır .

ben kullanmaya çalıştı:

ApplicationController.helpers.render_content(@blog_post.unprocessed_content) 

ama sonra/blog_post/product_item_with_pic gibi görünüm-partials bulamıyorum. Bu gibi konulara girmeyi sürdürürüm gibi geliyor.

Şu anda, ÇOK Çirkin bir çözüm (çalışır) var ve görünüm yüklendiğinde görünümde ön işlemenin yapılmasını sağlamaktır. Temel olarak, admin :: blog_post # gösterisinde render_content adını veriyorum ve daha sonra bir kaydetme işlemi yapıyorum. Evet, çirkin. Bu çözme en zarif yolu ne olurdu

Sorularım

  1. ?
  2. Gerçekten iyi bir yol yoksa, en azından ApplicationHelper'ı bu modelden böyle bir modelden aradığımda kısmi kısma nasıl erişebilirim?
+0

"render_content" inizin gerçekte ne yaptığı açık değil. – EugZol

+0

Kesinlikle haklısınız, çok açık değildi. Şimdi düzenledim. – Christoffer

cevap

2

Tam olarak ne istediğinizi anladığımdan emin değilim. Ancak Rails kullanmak için standart akış dışında işleme yeteneklerini görüntülemek için render_anywhere gem kullanmalısınız.

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 

senin oluşturucunuz içinde yardımcı kullanılabilir hale getirmek için hakkında bilgi için brief documentation okuyun.

+0

Evet, sorumu tekrar okudum ve çok açık değildi. Çözdüm, çözümünüzü kestirdim ve işlediğim kendi işlevlerimi biraz değiştirdim. Teşekkürler! – Christoffer

İlgili konular