gpt4 book ai didi

ruby-on-rails - Rails 路由 : What does only: [] do here?

转载 作者:行者123 更新时间:2023-12-04 02:21:36 24 4
gpt4 key购买 nike

我看到一段 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

据说此应用程序可与 devisecancancan 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com