2016-04-29 4 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 

エンド

私は 'アンドロイド/:ID' にアクセスするときには、#アンドロイド#は#アンドロイド番号の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パラメータ(または置換可能なパラメータ)は、固定名のルートに従う必要があります
  • +0

    ありがとうrお客様の視点!それを2回使うことはできませんか? – Alyanna

    +0

    同じルート宣言を2回使用すると、最初のルート宣言が上書きされます。あなたの例では、 '/ androids /:id'へのすべてのアクセスが常に' 'アンドロイド(' 'androids)に向かうように再割り当てされたため、':androids#show ' #show''アクション。 –

    +0

    助けてくれてありがとう!!!!! :) – Alyanna