2016-04-29 88 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' 

類AndroidsController < ApplicationController的這是路由錯誤嗎?

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 

當我進入 '機器人/:身份證' 它顯示了#機器人#顯示不是#機器人#customerview。我的代碼有問題嗎?我該怎麼處理這個路由錯誤?當我手動輸入localhost:****/androids/customer/2時,它會顯示正確的html頁面,但是當我點擊來自客戶頁面的鏈接時,它只會將我指向/ android /:id頁面。

回答

0

是的,您的路線中有/ androids /:id的重複定義。

這裏有更新的路由:

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' 

有兩點要注意:

  • 你應當認真考慮使用基於資源的途徑,這是更容易管理
  • 任何途徑與:id params(或任何可替換的參數)應該跟在固定路線之後
+0

感謝它的工作fo客戶觀點!我不能使用它兩次? – Alyanna

+0

第二次使用相同的路由聲明時,第一次被覆蓋。在你的例子中,'to:'androids#show''取代了之前的控制器動作(''androids#customerview''),所以對'/ androids /:id'的所有訪問都被重新分配,直接指向''androids #show''動作。 –

+0

感謝您的幫助!!!!! :) – Alyanna