2009-07-22 13 views
10

RoR becerilerimi bazı temel eğiticilerle geliştirirken bir sorunla karşılaştım. Elde etmeye çalıştığım şey, ayrı bir dizin ya da bireysel görünüm olmaksızın gönderilere ait yorumlar yapmaktır. Bu bölüm kolaydı.Raylar yönlendirme ve URI fragmanı tanımlayıcısı

İşte zor olanı geliyor. Adresin fragment identifier: http://example.com/posts/2#comment-4 ile dönmek için post_comment_url olmasını istiyorum. :anchor parametresi olmadan redirect_to'u en basit biçimde kullanmamı sağlar (ruby ​​yolunda şeyleri basit tutmak).

Bu nasıl yapılır?

cevap

12

yerine Rails'in varsayılan davranışını değiştirme, muhtemelen bir yardımcı yönteminde ihtiyaçlarınızı tamamlamayı daha iyi olurdu:

# in app/controllers/application_controller.rb 
class ApplicationController 
    helper :comment_link 

    def comment_link(comment) 
    post_comment_url(comment.post, comment, :anchor => "comment-#{comment.id}") 
    end 
end 

helper çağrısı Eğer gibi görünümlerde bu yöntemi erişmenize olanak tanır kontrolörlerin kadar iyi.

+0

Muhtemelen bu iyi bir çözümdür, ancak bu sarmalayıcıdan hoşlanmıyorum çünkü yerel post_comment_url yöntemini kullanma kuralını ihlal edecektir. Ayrıca, post_comment_path için başka bir yardımcıya ihtiyacım olduğunu da belirttim. Çalışma çözümü olduğu için, yeterince DRY olduğunu sanmıyorum. – samuil

+0

Bir gönderiyi bir yorum ile geri göndererek post_comment_url için Rails sözleşmesine karşı çıkmak, daha geniş baş ağrılarına yol açma eğilimindedir: çapa seçeneğini her seferinde geçirmeniz gerekir (aslında bunun daha iyi bir yol olduğunu söyleyebilirim) .) Ayrıca hemen hemen her şeyi yapmak için bir neden olarak DRY kullanmaya karşı uyarıda bulundum. DRY terimi, Agile kelimesi gibidir: ilke ve uygulamaların bir koleksiyonunu tanımlar, kendi başına neredeyse hiçbir şey ifade etmez. – nakajima

+2

DRY, esrarengiz eserler koleksiyonu değildir. Sadece şu anlama gelir: her bilgi sadece bir kez kodda görünmelidir ve tasarımın nerede olduğunu netleştirmesi gerekir. Eğer yardımcıdan daha iyi bir çözüm yoksa (Rails için hala çok yeniyim, bu yüzden bazı varsayılan yöntemleri değiştirerek ve akıllıca düşünerek çözümü uygulamak kolay olup olmadığına hiç inanamıyorum). gelecek Ray sürümü. – samuil