输入以下地址
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
就能显示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:
无论如何,就当前的情况,看解决方案.
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]
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
如果,楼主的意思是,想说
在没有登录的情况下访问http://127.0.0.1:3001/user.name
输出公开的信息
在已经登录的情况下访问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? 这样,就可以实现你说的要求了。也应该是正统的方法。