【发布时间】:2014-04-25 20:05:35
【问题描述】:
我想要做的是对我的路由进行限制,以确保该对象在路由到它之前是“小部件”或“链轮”或任何东西,并最终对其进行验证
查看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"}
【问题讨论】:
标签: ruby-on-rails constraints slug