2010-06-11 6 views
19

Ich habe versucht, Schienen umleiten, um Aktion zu zeigen, indem Sie Controller, Aktion und Parameter übergeben. Allerdings ignoriert rails den Namen der Aktion total!Schienen: redirect_to: controller => 'Tipps',: Aktion => 'show',: id => @ tip.permalink

, was ich habe ist http://mysite/controllername/paramId

so habe ich Fehlermeldung ....

hier ist der Aktionscode I verwendet:

def update 
    @tip = current_user.tips.find(params[:id]) 
    @tip.attributes = params[:tip] 
    @tip.category_ids = params[:categories] 
    @tip.tag_with(params[:tags]) if params[:tags] 


    if @tip.save 
     flash[:notice] = 'Tip was successfully updated.' 
     redirect_to :controller=>'tips', :action => 'show', :id => @tip.permalink 
    else 
     render :action => 'edit' 
    end 
    end 

Antwort

-3

Dies könnte ein vorübergehender Natur sein „umgehen ". Mit dem Rendern funktioniert es sehr gut ....

if @tip.save 
    flash[:notice] = 'Tip was successfully updated.' 
    render :action => 'show', :id => @tip.permalink 
# redirect_to :controller=>'tips', :action => 'show', :id => @tip.permalink 
else 
    render :action => 'edit' 
end 
35

Warum das Framework bekämpfen?

redirect_to @tip 

Und Sie können Ihren Code verkürzen, indem Sie die Option: notice verwenden.

redirect_to @tip, :notice => 'Message here' 
+0

Ich wusste nicht über die: Hinweis Verknüpfung auf redirect_to. Danke, das wird sicherlich ein bisschen Zeit sparen. Gibt es eine Entsprechung für flash.now und render? – alternative

+3

Verwenden Sie die Kraft, Luke – Rimian

7

Wenn es eine REST-Ressource-Route ist, ist das Routing tatsächlich korrekt. Eine GET Anfrage auf /tips/id ruft tatsächlich die show Aktion auf. Wegen der Art, wie es routet, rate ich, dass Sie es mit map.resources geroutet haben, und das ist richtig.