作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我看到一段 Rails 的路由代码是这样的:
namespace :my do
resource :auth_states, only: [] do
collection do
get 'signed_in'
end
end
resource :password, only: [:edit, :update]
# And all the actions a logged in user can perform under "my" namespace...
# ...
end
据说此应用程序可与 devise
和 cancancan
gem 一起使用。我想 :auth_states
部分会在用户执行以下所有操作之前验证用户是否已登录。然而,我对 only: []
有点困惑。这是否意味着不会为 :auth_states
生成任何操作?那这个东西是怎么工作的。这是否意味着没有访问者可以从外部访问 auth_states
,但应用程序本身仍然可以使用它? only: []
是 Rails 中广泛使用的模式吗?
谢谢
最佳答案
only: []
包含一组要为资源路由的白名单操作。例如,如果您指定
resource :auth_states, only: [:index]
那么只会生成索引 Action ,因此
GET /auth_states
会起作用,而(新 Action )
GET /auth_states/new
不会。传递空操作是将资源用作嵌套路由的命名空间的技巧。事实上,在您的情况下,路由器将路由
GET /auth_states/signed_in
但同时,不会路由
GET /auth_states
GET /auth_states/1234
有时,您会看到它与 controller
选项结合使用
resource :authentication, controller: 'auth_states', only: [] do
collection do
get 'signed_in'
end
end
生成
GET /authentication/signed_in
路由器有一个 namespace
方法,但它会自动将 Controller 的范围限定在一个 Ruby 命名空间中。使用这个技巧有时会更有效,并且允许将属于同一伞下的所有路由分组,并为它们添加相同的路径前缀。
关于ruby-on-rails - Rails 路由 : What does only: [] do here?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28518583/
我是一名优秀的程序员,十分优秀!