Пользовательские маршруты Ruby в модели - PullRequest
0 голосов
/ 16 ноября 2008

Хорошо, эти два связанных вопроса относятся к Railscast # 21 :

У меня проблемы с маршрутами. Два вопроса:

1) Кажется, что маршруты в руководстве относятся к корню приложения; Я хочу, чтобы они были относительно корня модели. Так

"<a href="http://example.com/login" rel="nofollow noreferrer">http://example.com/login</a>" Мне нужно быть "<a href="http://example.com/model/login" rel="nofollow noreferrer">http://example.com/model/login</a>" (и наоборот для выхода из системы).

Я использую постоянные ссылки для ссылки на свои записи, и я не знаю, как указать переопределение, потому что каждый раз, когда я пытаюсь использовать "<a href="http://example.com/model/login" rel="nofollow noreferrer">http://example.com/model/login</a>", я получаю сообщение об ошибке, которое говорит, что не может найти запись «логин». Как я могу переопределить это для входа / выхода?

2) Переход к пользовательскому маршруту для меня, похоже, не сохраняет пользовательский маршрут в моей адресной строке. Таким образом, переход к «<a href="http://example.com/login" rel="nofollow noreferrer">http://example.com/login</a>» возвращает меня на нужную страницу, но браузер теперь говорит «<a href="http://example.com/session/new" rel="nofollow noreferrer">http://example.com/session/new</a>» в адресной строке. В учебнике этого не происходит: приложение обслуживает правильную страницу и сохраняет пользовательский маршрут в адресной строке. Как я могу заставить это случиться для меня?

## Sessions Controller
class SessionController < ApplicationController
  def create
    session[:password] = params[:password]
    flash[:notice] = "Successfully Logged In"
    redirect_to :controller => 'brokers', :action => 'index'
  end

  def destroy
    reset_session
    flash[:notice] = "Successfully Logged Out"
    redirect_to login_path
  end
end

## Routes
ActionController::Routing::Routes.draw do |map|
  map.resources :brokers, :session
  map.login 'login', :controller => 'session', :action => 'create'
  map.logout 'logout', :controller => 'session', :action => 'destroy'
  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'
end

1 Ответ

0 голосов
/ 16 ноября 2008

Что вы имеете в виду под "корнем модели"? Вы должны проложить маршруты к контроллерам и их действиям . Контроллер должен связываться с моделью .

Сообщения об ошибках могут быть немного запутанными, но, насколько я вижу, этот URL:

http://example.com/model/login

вызовет действие с именем login в контроллере с именем model с пустым идентификатором (который, вероятно, не существует), используя этот маршрут:

map.connect ':controller/:action/:id'

Если вы хотите иметь «подпапку» в вашем маршруте, вы можете использовать пространства имен, я не помню каждую деталь об этом, но вы можете найти много информации об этом здесь . Предупреждение: пространства имен усложняют отладку маршрута, у меня было много веселья, выясняющего, какой маршрут действительно используется. В итоге я создал много очень специфических маршрутов, чтобы быть уверенным, что был использован правильный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...