好的,这两个相关问题参考了Railscast #21:
我遇到路线问题。两个问题:
1)教程中的路由似乎是相对于应用程序的根目录;我希望它们相对于模型的根。所以
“http://example.com/login
”我需要“http://example.com/model/login
”(反之亦然)。
我正在使用固定链接来引用我的记录,而且我不知道如何指定覆盖,因为每次我尝试使用“http://example.com/model/login
”时,我都会收到错误消息,指出它不能找到记录“登录”。如何覆盖登录/注销?
2)对我来说,自定义路线似乎没有在我的地址栏中保留自定义路线。所以转到“http://example.com/login
”会让我进入正确的页面,但浏览器现在在地址栏中显示“http://example.com/session/new
”。在本教程中,这不会发生:应用程序提供正确的页面并将自定义路由保留在地址栏中。我怎么能让这件事发生在我身上?
## 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
答案 0 :(得分:0)
你对“模特的根”是什么意思?您应该建立到控制器的路由及其操作。控制器应与模型进行通信。
错误消息可能有点令人困惑,但据我所知,这个网址:
http://example.com/model/login
将使用此路由调用名为 model 的控制器中名为 login 的操作,其中包含空ID(可能不存在):
map.connect ':controller/:action/:id'
如果你想在你的路线中有一个“子文件夹”,你可以使用命名空间,我不记得它的每一个细节,但你可以找到很多关于它的信息here。一句警告:命名空间使路由调试变得更加困难,我有一个很好的很多很有趣,可以找出真正使用过的路由。我最终创建了许多非常具体的路线,以确保使用正确的路线。