Вопрос по ruby-on-rails-4, ruby-on-rails, routes, ruby-on-rails-3.2, ruby-on-rails-3 – Как создать универсальный маршрут в Ruby on Rails?
Я хочу, чтобы все запросы, удовлетворяющие определенному ограничению, шли к конкретному контроллеру. Поэтому мне нужен универсальный маршрут. Как мне указать это в Rails? Это как то так?
match '*', to: 'subdomain_controller#show', constraints: {subdomain: /.+\.users/}
Это действительно поймает все возможные маршруты? Это'Важно, чтобы ни один из них не проскальзывал, даже если вложенных каталогов много.
Используя Ruby on Rails 3.2, но готов к обновлению до 4.0.
ОБНОВИТЬ:'*path'
похоже на работу. Тем не менее, проблема, которую ям работает в это всякий раз, когда файл существует в моемpublic
каталог, Rails отображает это вместо.
@ksu - так это
*path
? А потомparams[:path]
держит путь?
at.
Я думаю, что на этот вопрос ответ здесь: [stackoverflow.com/questions/4132039/... [1]:stackoverflow.com/questions/4132039/...
ksu
2
ответа
что вам нужны незначительные изменения в этом подходе, но вы понимаете:
ОБНОВИТЬ:
#RAILS 3
#make this your last route.
match '*unmatched_route', :to => 'application#raise_not_found!'
#RAILS 4, needs a different syntax in the routes.rb. It does not accept Match anymore.
#make this your last route.
get '*unmatched_route', :to => 'application#raise_not_found!'
А также
class ApplicationController < ActionController::Base
...
#called by last route matching unmatched routes.
#Raises RoutingError which will be rescued from in the same way as other exceptions.
def raise_not_found!
raise ActionController::RoutingError.new("No route matches #{params[:unmatched_route]}")
end
...
end
Больше информации здесь:https://gist.github.com/Sujimichi/2349565
Да, я думаю, Rails 4 нужен другой синтаксис в routs.rb. Это не принимает матч больше. получить '* Unmatched_route»,: to => 'Приложение # raise_not_found!
TheAshwaniK
Это неработать для корневых путей или путей, которые существуют в
public
каталог. Корневые пути не имеют большого значения, я могу добавитьroot to
в моем файле маршрутов. Но другой вопрос, который я нене знаю, как преодолеть.
at.
В Rails 4 это выдает ошибку: грабли прерваны! Вы не должны использовать
match
метод в вашем роутере без указания метода HTTP. Если вы хотите выставить свое действие как GET, так и POST, добавьтеvia: [:get, :post]
вариант. Если вы хотите выставить свое действие на GET, используйтеget
в роутере: вместо: совпадатьконтроллер # действие» Получить "контроллер # действие»
Pavel Kalashnikov
Rails 4 принимает совпадения, но вам также нужно указать метод HTTP. Поймать все, что перенаправляет в root
match "*path", to: redirect('/'), via: :all
Epigene
Это должно работать
Calamas::Application.routes.draw do
get '*path', to: 'subdomain_controller#show',constraints: lambda { |request| request.path =~ /.+\.users/ }
end
Мой предыдущий ответ нет работал в вашем случае. Смотрите мой обновленный ответ. Документация здесь -> guides.rubyonrails.org/routing.html#advanced-constraints
usha
Haven»Я пытался это сделать, но, похоже, это может сбивать с толку
:subdomain
как путь? Является ли ограничение на путь или поддомен тогда?
at.
Это неработать для корневых путей или путей, которые существуют в
public
каталог. Корневые пути не имеют большого значения, я могу добавить их в свой файл маршрутов. Но другой вопрос, который я нене знаю, как преодолеть.
at.
Похожие вопросы
<span>@ksu - так это<code>*path</code>? А потом<code>params[:path]</code> держит путь?</span>
<span>Я думаю, что на этот вопрос ответ здесь: [<a href="http://stackoverflow.com/questions/4132039/rails-redirect-all-unknown-routes-to-root-url][1]">stackoverflow.com/questions/4132039/...</a> [1]:<a href="http://stackoverflow.com/questions/4132039/rails-redirect-all-unknown-routes-to-root-url">stackoverflow.com/questions/4132039/...</a></span>