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