请教一下路由的问题,不知该怎么配

输入以下地址

http://127.0.0.1:3001/user

controller:usercontroller

model:user

view:index

其中model里有字段name
index里有user的公开信息和不公开信息,但必须登陆后才能都显示

我想在地址栏输入http://127.0.0.1:3001/user.name
就能把user的公开信息显示出来
应该怎么设置路由?
[b]问题补充:[/b]
web框架?
就RAILS自带的MVC吧,user加了REST规则
[b]问题补充:[/b]
例如有个user,user name是aaa

http://127.0.0.1:3001/aaa

就能显示aaa的公开信息主页
[b]问题补充:[/b]
是这样的,我想通过http://127.0.0.1:3001/user.name 中的user.name来判断并获取数据库中对应的数据,夜鸣猪 大大理解的是对的,我是那个意思,但光加一个授权方法还是不能改变路由吧??http://127.0.0.1:3001/user的user是C的名字,但我想把它映射成数据库的数据的字段值,我想除了改model还得改路由吧
[b]问题补充:[/b]
我举个例子(感觉有点麻烦)

表users,字段
1: name为aaa,password为111
2: name为bbb,password为222

默认页为user/index.haml,index里想判断网址是否输入user.name

如果输入http://127.0.0.1:3001/,则在index里判断user.name为空,显示为:
请登陆或注册

如果输入http://127.0.0.1:3001/ccc,则在index里判断没有此用户,显示为:
没有找到用户ccc,请先注册

如果输入有user.name的网址http://127.0.0.1:3001/aaa

登录前(登陆前后都是ajax请求,刷新局部):
此页是aaa的主页,password不显示

登陆后:
欢迎aaa,aaa的密码为111

如果输入网址http://127.0.0.1:3001/bbb

登录前:
此页是bbb的主页,password不显示

登陆后:
欢迎bbb,bbb的密码为111
[b]问题补充:[/b]
错了,bbb的密码为222

[quote]表users,字段
1: name为aaa,password为111
2: name为bbb,password为222

默认页为user/index.haml,index里想判断网址是否输入user.name

如果输入http://127.0.0.1:3001/,则在index里判断user.name为空,显示为:
请登陆或注册

如果输入http://127.0.0.1:3001/ccc,则在index里判断没有此用户,显示为:
没有找到用户ccc,请先注册

如果输入有user.name的网址http://127.0.0.1:3001/aaa

登录前(登陆前后都是ajax请求,刷新局部):
此页是aaa的主页,password不显示

登陆后:
欢迎aaa,aaa的密码为111

如果输入网址http://127.0.0.1:3001/bbb

登录前:
此页是bbb的主页,password不显示

登陆后:
欢迎bbb,bbb的密码为111[/quote]

好吧,首先,强烈建议你在http://127.0.0.1:3001/aaa的url,变成http://127.0.0.1:3001/user/aaa,其中user是固定的,aaa是用户名.
因为,这样可以避免一个逻辑冲突
例如,你坚持用http://127.0.0.1:3001/aaa,那么,就会限制用户名,不能和工程本身的cotroller名冲突.就是如果你有个用户是aaa那么,就不能有个cotroller是aaa,否则,路由没有办法写. 也就是说在项目本身功能很简单的情况下,才勉强可以这么用. 话虽这么说,但是,在url中不写明controller,还是有点别扭. :cry:

无论如何,就当前的情况,看解决方案.
  1. router.rb可以这么写:
    [code="ruby"]
    map.root ,:controller=>'users',action=>'login'#若http://127.0.0.1:3001/,则跳到login界面
    map.connect ':controller/:action/:id'
    map.connect ':controller/:action/:id.:format'
    map.connect ':controller/:action'
    map.connect ':user',:controller=> 'users',:action=>'show_user'#处理匹配不上任何controller的输入,跳转UsersController的show_user方法.
    end[/code]

  2. users_controller.rb这么写:

[code="ruby"]class UsersController < ApplicationController
def login
end

def show_user
ur=User.find_by_name(params[:user])#params[:user]为输入的变量并在此进行判断
if #没有找到
render :text=>'没有找到用户ccc,请先注册 '
else
if login(ur.id)?
render :test=>"欢迎#{ur.name},#{ur.name}的密码为#{ur.passwd.pwd_salt}"
else
render :test="此页是#{ur.name}的主页,password不显示"
end
end
end[/code]

我简单调试了,运行没问题,但是细节要你自己调试,希望能给你一些启发吧.
最后,还是希望,如果不是有特别的需求时,还是把url中加上要处理的controller甚至action这样,不容易混淆别的controller和输入的user名参数.

个人意见,参考吧 :arrow: :D

你用的什么web框架??

有点没明白你说的意思,这是我们配过的路由,给你举个例子

[code="java"]

map.connect "/admin/plans/:action", :controller => "admin/role"
map.connect "login", :controller => "home",:action=>"login"
[/code]
如果用到过滤的话,是这样的
before_filter :login

如果,楼主的意思是,想说

  1. 在没有登录的情况下访问http://127.0.0.1:3001/user.name

             输出公开的信息
    
  2. 在已经登录的情况下访问http://127.0.0.1:3001/user.name

             输出公开信息和授权信息
    

那么,你需要的并不是修改路由。而是,在helper目录下的user_helper.rb里写一个,授权判断的方法 admin?

然后,在user目录的对应view里,把授权信息,加上if admin? 这样,就可以实现你说的要求了。也应该是正统的方法。

个人理解 :D :arrow:

如果,你有大量的信息要分权限
也可以用layout分开
[code="ruby"] class ProjectsController < ApplicationController

layout :user_layout

def index

@projects = Project.find(:all)

end

protected

def user_layout

if current_user.admin?

"admin"

else

"application"

end

end

end [/code]

或者,加载不同partial
[code="ruby"]render :partial=> public_show
if admin?
render :partial=> admin_show
elsif
render...
end[/code]

在user目录的对应view里,把授权信息,加上if admin? 这样,就可以实现你说的要求了。也应该是正统的方法。