2

在 rails/ruby 中有没有一种方法可以将我的路由代码简化为优雅的,例如:

重定向到 user.role + _url

这样,如果用户是管理员,他们将被路由到管理页面,依此类推,其他用户类型...

4

5 回答 5

4

当然!

redirect_to send("#{user.role}_url")

在 ruby​​ 中,发送将在接收器上执行该方法,这正是您想要的。通常,这看起来像:

@receiver_object.send(:admin_url)

但是 url-helpers 在全局命名空间中工作,所以你可以发送到全局并让它工作。

简单的测试方法:将其添加到控制器并观看它重定向您的家:

redirect_to send("root_path")
于 2012-05-02T02:53:44.977 回答
2

可能最好的方法是使用url_for助手。例如。

redirect_to url_for( :controller => users, :action => user.role )

这将生成路径/users/admin/users/guest

如果您想以一种骇人听闻的方式进行操作,则可以使用

redirect_to eval("#{user.role}_url")

不过要小心。您的字符串不起作用的原因是它没有被评估,所以redirect_to "admin_url"什么都不做,它只是一个无意义的字符串,redirect 期望字符串是一个 URL。

如果您评估该字符串,它将起作用,因为redirect_to eval("#{user.role}_url")将首先转换"admin_url"为调用该admin_url方法,该方法返回一些类似 的路径users/admin,并且该字符串可用于重定向方法。

于 2012-05-02T02:45:22.333 回答
0

您可以使用render "#{user.role}". 只需确保具有名称为 admin.html.erb' 等的相应视图。

于 2012-05-02T02:40:18.437 回答
0

您可以做几件事,但没有什么是内置的,也没有什么比send("#{user.role}_url"). 请务必使用 send() - 否则它将重定向到 URL“/admin_url”,而不是调用 admin_url 帮助程序。

另一个这样的解决方案是创建一个名为“home”的操作,该操作将重定向到 current_user 的角色页面。这会增加一个额外的重定向(稍微增加页面加载时间),但它会使你的重定向更简单

redirect_to home_url
于 2012-05-02T02:44:23.100 回答
0

我真的很喜欢安德鲁的回答,但你也可以做类似的事情

redirect_to send(user.role.to_s + '_url')
于 2012-05-02T02:54:32.933 回答