1
我想要做的是對我的路由有一個約束,以確保對象是一個「小部件」或「鏈輪」或任何之前路由到它,並最終驗證反對Rails的高級路由約束沒有路由匹配
在http://guides.rubyonrails.org/routing.html#advanced-constraints服用後一看,我有我的routes.rb
class WidgetssConstraint
def initialize
@widgets = Widget.all
end
def matches?(request)
@widgets.include?(request.widget_slug)
end
end
FunParts::Application.routes.draw do
namespace 'admin' do
resources :widgets
resources :sprockets
root 'widgets#index'
end
get "*widget_slug" => "widgets#show" , :constraints => WidgetsConstraint.new
end
下,我的小部件控制器看起來像這樣
class WidgetsController < ApplicationController
layout 'public'
def show
@widget= Widget.where(slug: params[:widget_slug]).first
if @widget.present?
render :show
else
render :file => "#{Rails.root}/public/404", :layout => false, status: 404
end
end
end
我得到以下
undefined method `widget_slug' for ActionDispatch::Request:0x56ea700
提取的源誤差(大約線#7):
def matches?(request)
@trucks.include?(request.widget_slug)
end
end
請求
參數:
{"widget_slug"=>"ultra/lifter"}
謝謝你的方向,正是我需要的 –