2010-12-15 8 views
3

Ich benutze die http://guides.rubyonrails.org/getting_started.html als ein Beispiel, um mir zu helfen, meine eigene Anwendung zu erstellen. Ich erstelle die Blog- und Kommentarmodule ganz gut. Wenn ich den Kommentaren oder Blog-Controllern eine Methode hinzufüge, kann ich keine link_to-Aktion zum Aufruf der neuen Funktion aufrufen. Alles deutet auf ein Problem in den routes.rb hin, aber ich habe die ganze neue Syntax ausprobiert, die ich gesehen habe und nichts funktioniert für mich.Rails 3 wie man eine benutzerdefinierte Methode zum Controller hinzufügt

Was ich versuche, ist eine einfache Ausführungsmethode in der Steuerung zu erstellen, um ein Ruby-Skript auszuführen und die Ausgabe in der Datenbank zu speichern. Alles funktioniert nach dem Tutorial, aber wenn ich versuche, den Kommentar-Controller mit einer benutzerdefinierten Funktion namens execute zu erweitern, kann ich das nicht ausführen.

comments_controller.rb #Same as destroy 
def execute 
    @post = Post.find(params[:post_id]) 
    @comment = @post.comments.find(params[:id]) 
    @comment.destroy 
    redirect_to post_path(@post) 
end 

_comment.html.erb 
<%= link_to 'Execute Comment', [comment.post, comment], 
    :method => :execute %> 

routes.rb 
resources :posts do 
    resources :comments do 
    get :execute, :on => :member 
    end 
end 

rake routes |grep execute 
execute_post_comment GET /posts/:post_id/comments/:id/execute(.:format) {:action=>"execute", :controller=>"comments"} 

Error when I click Execute comment link: 
No route matches "/posts/3/comments/6" 

Antwort

5

Lauf rake routes und sehen, ob es irgendwelche Routen sind die auf Ihre Controller-Aktion. Wenn nicht, müssen Sie entweder eine "Mitgliedsaktion" oder eine Übereinstimmungsregel erstellen.

Wenn Sie die Route sehen, können Sie sie benennen, indem Sie einen Parameter: as => route_name an die Routing-Regel übergeben. Dadurch wird die route_name_path() und route_name_url() Helfer für Ihre link_to

Railscasts hat einen guten schnellen Überblick über die Schienen 3-Routing-Syntax here

EDIT aktivieren:

basierend auf den Codebeispielen Dabei versuchen:

<%= link_to 'Execute Comment', execute_post_comment_path(comment.post, comment) %> 

die Dokumentation nach here die :method Option nur gültig http Verben (get enthalten kann, p ut, posten, löschen). Der Helper link_to kann nicht herausfinden, welche Aktion mit einer benutzerdefinierten Mitgliedsaktion ausgelöst werden soll. Sie müssen also die oben genannte Route verwenden.

HTH

+0

Danke, ich habe die Schienen gegossen und viel gelernt. Ich war in der Lage, eine neue Funktion zu bekommen, um mit dem Post-Controller zu arbeiten, konnte aber immer noch nicht mit dem Comments-Controller laufen. Ich habe die Frage aktualisiert, um den von mir verwendeten Code einzuschließen. –

+0

Das hat funktioniert, vielen Dank! Du bist großartig. –

+0

Toller Link auch! Das hat gerade jetzt geholfen! – earlonrails

Verwandte Themen