我看到当我们在配置文件中命名路由时,类似于:
match 'controller/posts' => 'controller#posts', :as => 'posts'
它为具有该操作的控制器创建一个命名路由。
但是这个路由需要从代码中访问。说当我从视图中单击帖子按钮时,它应该为用户执行此操作。
但是当有人执行 www.xyz.com/posts 时,它不应该尝试执行这个。那可能吗 ?
我看到当我们在配置文件中命名路由时,类似于:
match 'controller/posts' => 'controller#posts', :as => 'posts'
它为具有该操作的控制器创建一个命名路由。
但是这个路由需要从代码中访问。说当我从视图中单击帖子按钮时,它应该为用户执行此操作。
但是当有人执行 www.xyz.com/posts 时,它不应该尝试执行这个。那可能吗 ?
不,如果有人在浏览器中输入 URL 而不是单击链接,则无法设置路由并拒绝访问。
听起来您正在尝试做的是防止用户猜测 URL。有几个选项可以做到这一点:
您可以使用设计进行身份验证。
要使用令牌,您可以设置如下路线:
match 'controller/{some unique token here}/posts' => 'controller#posts', :as => 'posts'
查看 Routes 上的Rails 指南,了解在路线上设置约束的其他方法。
我不知道你为什么要这样做。听起来您想要的是能够从另一个控制器调用特定的代码位。因此,由于您提到的原因,一条路线将不起作用(它将在浏览器上可用)。
相反,您应该提取这段代码并将其放入它自己的库中。
库/foobar.rb:
module Foobar
def my_method
# add your code here
end
end
然后,您可以从代码中的任何位置调用它。