2

代码是什么

redirect_to @user

在控制器方法中使用时,在 Rails 中是什么意思?

它究竟重定向到哪里?它是重定向到用户控制器(如果是,控制器的哪个方法),还是不通过控制器而是直接进入视图?

4

4 回答 4

4

基本上它会查找一堆关于你的资源路由如何工作的东西

这样想

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

于 2012-10-19T21:54:03.420 回答
2

redirect_to 文档

将浏览器重定向到选项中指定的目标。此参数可以采用以下三种形式之一:

   ...

记录 - 将通过使用选项调用 url_for 生成 URL,该选项将引用该记录的命名 URL。

url_for 文档

传递记录(如活动记录或活动资源)而不是哈希作为选项参数将触发该记录的命名路由。查找将发生在类的名称上。所以传递一个 Workshop 对象将尝试使用 Workshop_path 路由。如果您有嵌套路由,例如 admin_workshop_path,则必须显式调用它(url_for 无法猜测该路由)。

于 2012-10-19T21:56:05.723 回答
2

这相当于写

redirect_to user_path(@user)

更多的 Rails 魔法在这里起作用,无论好坏。

于 2012-10-19T22:08:19.637 回答
1

它像这样调用用户的显示功能

redirect_to user_path(@user)

重点:如果我们看到路由,则 :id 已通过,但此处对象已通过

它通过以下方式转换为用户的ID

def to_param self.id 结束

这在模型中可用,我们可以将其覆盖为

所以基本上转换首先发生

redirect_to @user => redirect_to user_path(@user)

然后

 @user => @user.id
于 2012-10-20T05:59:25.107 回答