2011-06-30 11 views
5

bende bu kullanmak istediğimRails 3'te özel _url yardımcısı nasıl oluşturulur?

match '/news/:year/:id' => 'news#show', :as => :news 

:

<%= link_to n.title, n %> 

(hangi /news/n.date.year/ yerine /news/n.id/current_news.id döndürür n.id)

istediğim bu kurtulmak için:

<%= link_to n.title, news_url(n, :year => n.date.year) %> 

bunu nasıl yapmalı?

Sonra
def custom_link_to(*args) 
    name   = args[0] 
    obj   = args[1] 
    if obj.is_a?(News) # or whatever class you are using 
    link_to(name, news_url(obj, :year => obj.date.year)) 
    else 
    link_to(args) 
    end 
end 

senin görünümünde:

<%= custom_link_to n.title, n %> 

Yoksa bazı benzer kodla link_to yardımcı yöntemi geçersiz olabilir

cevap

1

Bir yardımcı dosyasında böyle bir şey yapabilirsiniz. Custom_link_to yöntemini tercih ederim çünkü diğer link_to çağrılarını mahvetme şansı daha az. Ama eğer doğru yaparsan kesinlikle bundan kurtulabilirsin.

5

Sen yolunu oluşturur yardımcı geçersiz kılabilir hile yapmak gerekir NewsHelper modülüne böyle bir şey ekleyerek

: haber

nesneleri için

def news_path(news) 
    "/news/#{news.date.year}/#{news.id}" 
end 

sonra <%= link_to n.title, n %> size istediğiniz url verecek

+3

Bu özel durumda geçerli bir yaklaşımdır, ancak test edilebilir değildir ve URL yardımcılarının doğrudan rayları yönlendiren yardımcıları enjekte ederek kullanıldığı yerlere uzanmaz. – bbozo

İlgili konular