2016-06-29 11 views
0

Aus meiner Sicht übergebe ich einen Parameter an eine Methode in meinem Controller.Ruby-Routing beim Übergeben eines Parameters an den Controller

Der Pfad sieht wie folgt aus: /boats/:id/destroy_image?image_id=#

Ich habe das Routing lesen von Outside In Führung, und es nur Röcke über diese Art der Option kurz und nicht in der Lage, herauszufinden, wie dies zu routen an die boats#destroy_image Methode richtig.

Könnte jemand bitte etwas Licht abwerfen?

Danke!

+1

Bitte fügen Sie einen Code hinzu, den Sie ausprobiert haben. – Sravan

Antwort

0

ein Element in Schienen zu löschen, wird es in der Regel auf diese Weise getan

Die URL wäre:

:url => /boats/:boat_id/images/:id, :method => :delete 

Das ist wie so in einer Ansicht genannt wird

= link_to "delete", boat_image_path(boat, image), :method => :delete 

Und es würde von der destroy Aktion im Bilder-Controller behandelt werden.

Beruhigende Routen werden die gleiche URL wiederverwenden und die Methode ändern - im Boot-Beispiel können Sie Folgendes verwenden: get,: patch oder: delete zum Anzeigen, Aktualisieren oder Löschen.

Dies ist wahrscheinlich genug, um Sie in Gang zu bringen. Routen sind ein wichtiger Teil von Schienen - sowohl beim Generieren von URLs in Ansichten als auch beim Abgleichen von Anforderungen an die Controller # -Aktionen. Nehmen Sie sich etwas Zeit, um sich mit Rails-Routen und erholsamen Konzepten vertraut zu machen.

0

ok. Das ist also einfach. Sie können die Route wie folgt hinzufügen

get '/boats/:id/destroy_image' => 'boats#destroy_image' 

Sie können diese zusätzliche ID in Params einfach senden.

0

Wenn Sie die Schienen verschachtelt Ressourcen nach der Namenskonvention verwenden,

resources :boats do 
    resources :images 
end 

<%= link_to 'Delete Image', [@boat, @image], confirm: 'Are you sure?', method: :delete %> 

Diese Anforderungen an den Bilder Controller von den Schienen Weg. Senden der Boot-ID und der Bild-ID.

Aber, wenn Sie wollen ausdrücklich Route, die Steuerung an den Booten,

eine Route in der Steuerung Boote hinzufügen, wie,

delete '/boats/:id' => 'boats#destroy_image', as: :destroy_image(image.id) 

senden, um die image_id durch params,

dann in der Steuerung,

class BoatsController < ApplicationController 


    def destroy_image 
     @image = Image.find(params[:id]) 
     @boat = @image.boat //do anything you want with the boat object 

     if @image.destroy 
     else 
      // *** ***// 
     end 

     respond_to do |format| 
      format.html { redirect_to list_tasks_path(@task) } 
      format.json { head :ok } 
     end 
    end 

end 

Die Route, die Sie erwähnt haben, führt Sie also zur Aktion destroy_image im Boot-Controller, auch wenn die Route keine image_id als Abfrage-String enthält, sondern wir senden sie durch params. Das ist die Kraft der Schienen.

Verwandte Themen