美文网首页
views中xxx_url后面的参数的意思

views中xxx_url后面的参数的意思

作者: kamionayuki | 来源:发表于2015-05-27 23:05 被阅读109次

    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

    相关文章

      网友评论

          本文标题:views中xxx_url后面的参数的意思

          本文链接:https://www.haomeiwen.com/subject/mbmrqttx.html