代码是什么
redirect_to @user
在控制器方法中使用时,意味着在Rails中?
它究竟在哪里重定向到?它是重定向到用户控制器(如果是,控制器的哪个方法),还是不通过控制器而是直接转到视图?
答案 0 :(得分:4)
基本上,它会查找有关资源路径如何工作的大量内容
想到这就好了
send("#{@user.class.name.underscore.downcase}_path", @user)
这可能不是确切的代码,但它应该可以帮助您想象实际发生的事情。
控制器总是运行,在这种情况下,除非你有一些时髦的路由器选项,否则它将是你的用户控制器的show动作。
rake routes
解释了在这个案例中如何布置路线
get /users/:id => users#show :as => "user_path"
您传入的模型的替换就像这样
从您的路线创建正则表达式
:id是一个参数
将匹配inbound_object到路径函数@user
:id is replaced with @user.id
答案 1 :(得分:2)
将浏览器重定向到选项中指定的目标。此参数可以采用以下三种形式之一:
...
记录 - 将通过调用带有选项的url_for生成URL,该选项将引用该记录的命名URL。
来自url_for docs:
传递记录(如Active Record或Active Resource)而不是Hash作为options参数将触发named 该记录的路线。查找将在名称上发生 类。因此传递Workshop对象将尝试使用 workshop_path路线。如果您有嵌套路由,例如 admin_workshop_path你必须明确地调用它(它是 url_for不可能猜到那条路线。)
答案 2 :(得分:2)
这相当于写作
redirect_to user_path(@user)
更多Rails魔法在这里工作,无论好坏。
答案 3 :(得分:1)
它调用像这样的用户的show函数
redirect_to user_path(@user)
重点:如果我们看到路线那么:传递了id但是这里的对象正在传递
通过
转换为用户的iddef to_param self.id 端
在模型中可用,我们可以将其覆盖到
所以基本上首先要进行转换
redirect_to @user => redirect_to user_path(@user)
然后
@user => @user.id