2008-12-21 14 views
8

Jak uzyskać metodę to_param, aby dostarczać squidów słów kluczowych przez cały czas? Mam problemy z dostaniem się do pracy z tej trasy:Overriding Rails to_param?

map.pike '/ aukcja /: ​​auction_id/szt /: id',: controller => 'przedmioty',: action => 'Pokaż'

wcześniej nadpisane to_param pracował dla

'elementy/1-kaszmirowy szal-'

ale nie z 'auction/123/item/1'

Aktualizacja:

nie jestem upewnij się, że składnia jest poprawna [(edytuj: jest poprawna: działa :-)] lub nawet wydajna .... ale używając polecenia haml, stwierdziłem, że poniższy kod działa w celu wygenerowania pożądanego linku ('auction /: auction_id/item /: id ')

- for auction in @auctions.sort{|a, b| a.scheduled_start <=> b.scheduled_start} 
    -for item in @items 
    - unless auction.current_auction 
     ... pike_path(auction.auction_id, item) 

Odpowiedz

8

Nie jestem pewien, czy rozumiem twoje pytanie. (tutaj jest 3:41)

Z tego, co widzę, masz bezpośredni dostęp do metody auction_id, zamiast używać pike_path(auction, item), która używa #to_param.

Może również zawieść dla auction/123/item/1, ponieważ nie zmieniono kontrolera.

Myślę, że warto opisać, jak zdobyć działające ślimaki.

Ogólnie rzecz biorąc, jeśli zastąpisz #to_param, identyfikatory przestaną działać. Oznacza to, że jeśli używasz slugs, za każdym razem, gdy generowany jest polymorpic URL (np. link_to object, object), przechodzi on do wartości_param. Warto zauważyć, że musisz również zmienić kontroler.

Osobiście uważam, że najlepszym sposobem na łatwe generowanie ślimaki jest użycie techno-weenie na permalink_fu, dodając has_permalink do danego modelu, a następnie zastąpić to_param. Na przykład:

class Auction < ActiveRecord::Base 
    has_permalink :title, :slug 
end 

przy założeniu, że masz ślimak, pole ciągów i chcesz zmniejszyć swój tytuł.

Trzeba również wyregulować Kontroler:

class AuctionsController < ApplicationController 
    def show 
    @auction = Auction.find_by_slug(params[:id]) || raise(ActiveRecord::RecordNotFound) 

    respond_to do |format| 
     format.html # show.html.erb 
    end 
end 

Następnie można wygenerować tras, w widokach, w ten sposób:

link_to @action, @action 

nawiasem mówiąc, nie można ich rozwiązać swoje działania w widoku. Najlepszym sposobem jest użycie named_scope.

+3

możesz użyć 'find_by_slug!', Która zgłasza wyjątek, chyba że znaleziono –