views中xxx_url后面的参数的意思

xxx_url 等同于 xxx_path

先看rake routes生成的路由

Prefix Verb URI Pattern Controller#Action
root get / static_pages#home
new_user get /users/new(.:format) users#new
edit_user get /users/:id/edit(.:format) users#edit

可以注意到new_user_urledit_user_url对应的URI Pattern很不一样的地方
edit_user_url有一个/:id,这是变化的,只要在views中给edit_user_url传一个参数(user),会默认将user.id传给controller,这样就能编辑指定的user了。
那么,可以不传user.id吗?答案是可以,比如这样:

edit_user_url(user.name)

生成的链接是:

http://localhost:3000/users/Example%20User/edit
其中%20是空格的转义字符

这样做的可以把用户id隐藏起来

xxx_url不仅仅可以修改传过去的参数 ,还可以增加参数,如下:

<%= edit_user_url(@user.name, email: @user.email, arg1: "arg1")  %>

得到的是:

http://localhost:3000/users/Example%20User/edit?arg1=arg1&email=example%40railstutorial.org
%20和%40都是转义字符

后两个参数会变成查询参数,放在url的?后面
在controller中,我们可以用以下方式获得参数的值注意params[:id]

params[:id] #=> "Example User"
params[:arg1] #=> "arg1"
params[:email] #=> "example@railstutorial.org"

为什么params[:id]的值是@user.name?应该是因为在routes中edit_user_url对应的URI Pattern/users/:id/edit(.:format):id

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容