代码是什么
redirect_to @user
在控制器方法中使用时,在 Rails 中是什么意思?
它究竟重定向到哪里?它是重定向到用户控制器(如果是,控制器的哪个方法),还是不通过控制器而是直接进入视图?
代码是什么
redirect_to @user
在控制器方法中使用时,在 Rails 中是什么意思?
它究竟重定向到哪里?它是重定向到用户控制器(如果是,控制器的哪个方法),还是不通过控制器而是直接进入视图?
基本上它会查找一堆关于你的资源路由如何工作的东西
这样想
send("#{@user.class.name.underscore.downcase}_path", @user)
这可能不是确切的代码,但它应该可以帮助您可视化实际发生的事情。
控制器始终运行,在这种情况下,除非您有一些时髦的路由器选项,否则它将是您的用户控制器的显示操作。
rake routes
解释了在这种情况下路线是如何布置的
get /users/:id => users#show :as => "user_path"
来自传入模型的替换是这样的
从您的路线创建一个正则表达式
:id 是一个参数
将匹配 inbound_object 到路径函数,即@user
:id is replaced with @user.id
将浏览器重定向到选项中指定的目标。此参数可以采用以下三种形式之一:
...
记录 - 将通过使用选项调用 url_for 生成 URL,该选项将引用该记录的命名 URL。
传递记录(如活动记录或活动资源)而不是哈希作为选项参数将触发该记录的命名路由。查找将发生在类的名称上。所以传递一个 Workshop 对象将尝试使用 Workshop_path 路由。如果您有嵌套路由,例如 admin_workshop_path,则必须显式调用它(url_for 无法猜测该路由)。
这相当于写
redirect_to user_path(@user)
更多的 Rails 魔法在这里起作用,无论好坏。
它像这样调用用户的显示功能
redirect_to user_path(@user)
重点:如果我们看到路由,则 :id 已通过,但此处对象已通过
它通过以下方式转换为用户的ID
def to_param self.id 结束
这在模型中可用,我们可以将其覆盖为
所以基本上转换首先发生
redirect_to @user => redirect_to user_path(@user)
然后
@user => @user.id