2016-04-29 8 views
1
get 'androids/customer', to: 'androids#customer' 
get 'androids/:id', to: 'androids#customerview' 
get 'androids', to: 'androids#items' 
get 'androids/new', to: 'androids#new' 
post 'androids/create', to: 'androids#create' 
get '/androids/:id', to: 'androids#show' 
get 'androids/:id/edit', to: 'androids#edit' 
patch 'androids/:id/update', to: 'androids#update' 
get 'androids/:id/delete', to: 'androids#delete' 
get 'androids/:id/sold', to: 'androids#show' 

Klasse AndroidsController < ApplicationIst das ein Routingfehler?

def items 
    @android = Android.all 
end 

def customer 
    @android = Android.all 
end 

def customerview 
    @android = Android.find(params[:id]) 
end 

def show 
    @android = Android.find(params[:id]) 
end 

def new 
    @android = Android.new 
end 


def create 
    @android = Android.new 
    @android.name = params[:android][:name] 
    @android.brand = params[:android][:brand] 
    @android.year = params[:android][:year] 
    @android.camera = params[:android][:camera] 
    @android.mpixel = params[:android][:mpixel] 
    @android.storage = params[:android][:storage] 
    @android.slot = params[:android][:slot] 
    @android.size = params[:android][:size] 
    @android.os = params[:android][:os] 
    @android.stock = params[:android][:stock] 
    @android.save 
    redirect_to "/androids/#{@android.id}" 
end 

def edit 
    @android = Android.find(params[:id]) 
end 

def delete 
    @android = Android.find(params[:id]) 
    @android.destroy 
    redirect_to '/androids' 
end 

def update 
    @android = Android.find(params[:id]) 
    @android.update_attributes(android_params) 
    redirect_to "/androids/#{@android.id}" 
end 


private 
def android_params 
    params.require(:android).permit(:name, :brand, :year, :camera, :mpixel, :storage, :slot, :size, :os, :stock) 
end 

Ende

Wenn ich auf 'Androiden /: id' es zeigt die # Androiden # zeigen nicht die # Androiden # Customer. Stimmt etwas mit meinem Code nicht? Was soll ich mit diesem Routing-Fehler machen? Wenn ich localhost: ****/androids/customer/2 manuell eintippe, wird die richtige html-Seite angezeigt. Wenn ich jedoch auf den Link von der Kundenseite klicke, wird nur die/android /: id-Seite angezeigt.

Antwort

0

Ja, Sie haben doppelte Definitionen von/androids /: id in Ihren Routen.

Hier sind die aktualisierten Routen:

get 'androids/customer', to: 'androids#customer' 
get 'androids', to: 'androids#items' 
get 'androids/new', to: 'androids#new' 
post 'androids/create', to: 'androids#create' 
get 'androids/:id', to: 'androids#customerview' 
get 'androids/:id/edit', to: 'androids#edit' 
patch 'androids/:id/update', to: 'androids#update' 
get 'androids/:id/delete', to: 'androids#delete' 
get 'androids/:id/sold', to: 'androids#show' 

Ein paar Anmerkungen:

  • Sie dringend die Verwendung ressourcenbasierten Routen in Betracht ziehen sollten, die viel einfacher sind
  • jede Route zu verwalten mit : id params (oder irgendwelche ersetzbaren params) sollte gehen nach dem festnamen routen
+0

Danke es funktionierte fo r die Kundenansicht! Kann ich es nicht zweimal benutzen? – Alyanna

+0

Wenn Sie das zweite Mal dieselbe Routenerklärung verwenden, wird die erste überschrieben. In Ihrem Beispiel haben die 'to: 'androids # show'' die vorherige Controller-Aktion ('' androids # customerview'') ersetzt, so dass alle Zugriffe auf '/ androids /: id' neu zugewiesen wurden, um immer auf die' 'androids zu verweisen # Show'' Aktion. –

+0

danke für die Hilfe !!!!! :) – Alyanna