我想要一条路线,其中'/'后的所有字符串都是参数。
例如,如果网址为localhost:3000/posts/1/edit
,那么params[:path]
应该等于'posts / 1 / edit'
我试图做这样的事情
resource :item, path: '/:path', only: [:show, :update, :create, :destroy], constraints: { path: /.+/, format: :json }
但是在这种情况下,如果我最后有.json,它也包含在路径参数中。我在约束/.+\./
尝试了另一个正则表达式,但它也不起作用。
我做错了什么?谢谢你的支持!
答案 0 :(得分:0)
在您的控制器中,使用env['PATH_INFO']
代替params[:path]
答案 1 :(得分:0)
# SoAwesomeMan
# Rails 3.2.13
Awesome::Application.routes.draw do
resources :items, path: ':_path', _path: /[^\.]+/
# http://localhost:3000/posts/1/edit.json?q=awesome
# => {"q"=>"awesome", "action"=>"index", "controller"=>"items", "_path"=>"posts/1/edit", "format"=>"json"}
end
class ItemsController < ApplicationController
before_filter :defaults
def defaults
case request.method
when 'GET'
case params[:_path]
when /new\/?$/i then new
when /edit\/?$/i then edit
when /^[^\/]+\/[^\/]+\/?$/ then show
else; index
end
when 'POST' then create
when 'PUT' then update
when 'DELETE' then destroy
else; raise(params.inspect)
end
end
def index
raise 'index'
end
def show
raise 'show'
end
def new
raise 'new'
end
def edit
raise 'edit'
end
def create
raise 'create'
end
def update
raise 'update'
end
def destroy
raise 'destroy'
end
end