2014-10-23 25 views
11

Aşağıdaki kod var:Flaş mesajı benim denetleyicisi olarak

format.html { redirect_to new_customer_url, 
       notice: %Q[ A customer already exists with with this shopping id. Edit this customer #{view_context.link_to("here", edit_customer_url(@duplicate))}. 
    ].html_safe 
yüzden, flash mesajında ​​bir bağlantı eklemek mümkün olmak istiyorum

(Gördüğünüz gibi dize unescape için html_safe diyorum. Ancak, Rails 4.1'den itibaren bu artık farklı ele alınmıştır.

Buna çözeltisi this question temin edilmiştir (here ve here bakınız). Ancak, sadece tüm flash mesajların çıkışını etkisiz hale getirmek için html_safe numaralı çağrıyı görüntüye taşıyarak yapar.

Bundan biraz daha paranoyak olmayı tercih ederim, flaş mesajdaki bağlantıyı kontrolörden eklemenin bir yolu var mı?

cevap

15

Bu sorunu çözmenin bir yolu aşağıda verilmiştir. ürününe flash[:notice] html güvenliğini yalnızca flash[:html_safe] ayarlanmışsa güvenli hale getirin. Ardından, denetleyiciden html güvenliğini ne zaman ve ne zaman yapamayacağınızı kontrol edebilirsiniz.

before_filter -> { flash.now[:notice] = flash[:notice].html_safe if flash[:html_safe] && flash[:notice] } 

Sonra örnek bu şekilde modifiye edilebilir: bir cazibe gibi

format.html do 
    redirect_to(
    new_customer_url, 
    notice: %Q[ A customer already exists with with this shopping id. Edit this customer #{view_context.link_to("here", edit_customer_url(@duplicate))}.], 
    flash: { html_safe: true } 
) 
end 
+2

Çalışır! Teşekkürler. =) – 0112

+0

Rails 4.2'den itibaren bu denetleyici çalışmasında çalışmıyor flash [: notice] = "sode string
daha fazla metin" .html_safe – user1136228

+0

@ user1136228 Sadece bunu Rails 4.2.1 ve 4.2.5 ile denedim ve kesinlikle çalıştı. Lütfen kodunuzu kontrol edin. Kontrolör flaş olarak –

İlgili konular