Bir komisyon görevi/arka plan işi/modeli için kısmi görünüm/görünüm oluşturma Rails kısmi ve komisyon görevleri/arka plan işleri/modellerinde görünümleri oluşturma konusunda çok şey okudum. Stackoverflow ve web üzerinde bulduğum şeylerin büyük bir çoğunluğu Rails 3'te çalışan yaklaşımları anlatıyor, ancak modası geçmiş gibi görünüyorlar ve onları çalışmalarına bile getiremedim (oldukça fazla zaman harcayarak).Rails 4
Peki, , Rails 4'teki bir arka plan işinde kısmi nasıl işleyebilirim?
Şimdiye kadar çalıştığım en iyi yaklaşım şöyledir (konsolda gösterilmiştir).
c = ApplicationController.new
result = c.render_to_string(partial: 'tweets/tweet', locals: {tweet: Tweet.first})
# =>
# Tweet Load (0.8ms) SELECT "tweets".* FROM "tweets" ORDER BY "tweets"."id" ASC LIMIT 1
# Author Load (0.6ms) SELECT "authors".* FROM "authors" WHERE "authors"."id" = $1 ORDER BY "authors"."id" ASC LIMIT 1 [["id", 1]]
# Status Load (0.6ms) SELECT "statuses".* FROM "statuses" WHERE "statuses"."twitter_id" = 367523226848866304 LIMIT 1
# Rendered tweets/_tweet_body.html.slim (17.5ms)
# Rendered tweets/_resolved_tweet.html.slim (23.7ms)
# Rendered tweets/_tweet.html.slim (28.1ms)
# ActionView::Template::Error: undefined method `tweet_path' for #<#<Class:0x007fb21bf797a0>:0x007fb21cb009e8>
# from /Users/thomasklemm/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/routing/polymorphic_routes.rb:129:in `polymorphic_url'
Herhangi bir fikir? Şimdiden teşekkürler!
Güncelleştirme: Yukarıda belirtilen tweet_path
gerçekten tanımlanmamıştır. Bu hata, = link_to 'Tweet', [@project, tweet]
yoluna (ince şablonlar), belirli bir denetleyiciden miras alınan görünümlerde bulunacak bir örnek değişkeni kullanarak bağlantı oluşturmasıyla sonuçlandı, ancak bu bağlamın dışında oluşturulduğunda değil. Bunun yerine, = link_to 'Tweet', [tweet.project, tweet]
yerine uygun ilişkiyi çözdüm.
"Daha kolay çözüm" çalışır ancak şablonlarda yaygın olarak kullanılan "link_to" gibi işlevlere erişim sağlamamaktadır. Her iki çözüm de uygulamaya özel yardımcılara erişim sağlıyor. –
@JeremyBurton ['render_anywhere']' i (https://github.com/yappbox/render_anywhere) deneyebilir ve orada yardımcıların bulunup bulunmayacağını görebilirsiniz. –
Aslında sorunu, ViewRenderer sınıfında ihtiyaç duyduğum yardımcı modülleri içererek çözdüm. Teşekkürler. –