2012-01-27 13 views
5

szukam stworzyć nazwie trasę z ciągiem i przekazać obiekt do niegonazwane marszruty z ciągiem z obiektu

Mam renderowania częściowy z lokalnym „zasobu”

tj. render :partial => "listing", :locals => {:resource => @resource}

wewnątrz _listing.html.haml używam metody self.send

self.send("#{resource.class.to_s.downcase}_path()") 

to działa dobrze i tworzy zasoby nazwanych trasy tj. article_path()

, ale ta trasa potrzebuje obiektu przekazanego na trasie tj. article_path (artykuł)

próbuję to

self.send("#{resource.class.to_s.downcase}_path("+resource+")") 

i pojawia się błąd nie można przekształcić w art String

jakieś sugestie?

+0

po dużo majsterkowania znalazłem odpowiedź była dość prosta. poprawka była zrobić to przecinek oddzielone _listing.html.haml - resource_path = "# {resource.class.to_s.downcase} _path" = link_to resource.title, wysyłać (resource_path, zasobów) Mam nadzieję, że to pomoże każdemu, kto zmaga się z tym samym –

Odpowiedz

10

Należy przekazać argumenty tak:

self.send("#{resource.class.to_s.downcase}_path", resource) 
+0

@Ben Nie widziałem twojego komentarza, cieszę się, że to wymyśliłeś sam. – Jef

+0

obaj mamy rację. dziękuję za informację zwrotną jef –

+0

Używałbym zamiast tego: 'self.send (" # {resource.class.to_s.underscore} _path ", resource)' Będzie działać, jeśli twoja klasa jest więcej niż jednym słowem na przykład 'FooBar -> foo_bar' – vansan

1

Można uprościć odpowiedź Jef za (nie trzeba korzystać z zasobów) tak:

send("#{controller_name}_path")