0

我看到当我们在配置文件中命名路由时,类似于:

  match 'controller/posts' => 'controller#posts', :as => 'posts'

它为具有该操作的控制器创建一个命名路由。

但是这个路由需要从代码中访问。说当我从视图中单击帖子按钮时,它应该为用户执行此操作。

但是当有人执行 www.xyz.com/posts 时,它不应该尝试执行这个。那可能吗 ?

4

2 回答 2

1

不,如果有人在浏览器中输入 URL 而不是单击链接,则无法设置路由并拒绝访问。

听起来您正在尝试做的是防止用户猜测 URL。有几个选项可以做到这一点:

  • 需要对 URL 进行身份验证
  • 在 URL 中使用难以猜测的唯一标记 (/posts/1122bbbbababab/1)

您可以使用设计进行身份验证。

要使用令牌,您可以设置如下路线:

match 'controller/{some unique token here}/posts' => 'controller#posts', :as => 'posts'

查看 Routes 上的Rails 指南,了解在路线上设置约束的其他方法。

于 2013-10-07T06:03:28.443 回答
1

我不知道你为什么要这样做。听起来您想要的是能够从另一个控制器调用特定的代码位。因此,由于您提到的原因,一条路线将不起作用(它将在浏览器上可用)。

相反,您应该提取这段代码并将其放入它自己的库中。

库/foobar.rb:

module Foobar
  def my_method
    # add your code here
  end
end

然后,您可以从代码中的任何位置调用它。

于 2013-10-06T20:14:00.203 回答