2014-01-29 4 views
0

Я хочу иметь маршрут, в котором все строки после '/' будут параметром.Использовать весь путь как параметр на маршрутах

Например, если URL является localhost:3000/posts/1/edit то params[:path] должен быть равен «сообщений/1/редактировать»

Я пытался сделать что-то вроде этого

resource :item, path: '/:path', only: [:show, :update, :create, :destroy], constraints: { path: /.+/, format: :json } 

Но в этом случае, если я .json в конце он также включен в параметр пути. Я пробовал другое регулярное выражение при ограничении /.+\./, но он тоже не работает.

Что я делаю неправильно? Спасибо, спасибо!

+0

Зачем вам это в других парах? Вы уже можете выполнить 'request.env [" PATH_INFO "]' в контроллере, чтобы получить тот же результат (хотя у него будет начальная косая черта, от которой вы легко можете избавиться). – MrDanA

+0

@Pavel «Yo dawg», я слышал, что вам нравится regexing: path, поэтому я изменил: путь к: _path, так что вы могли бы иметь: путь, пока вы regexing: _path – SoAwesomeMan

ответ

0

В контроллере, получить его с env['PATH_INFO'] вместо params[:path]

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 
Смежные вопросы