"member do" 在 rails 路由中的功能

function of "member do" in rails routing

我不太确定我是否理解“member do” 块在 rails routing

中的用途
resources :todo_lists do
    resources :todo_items do
        member do
            patch :complete
        end
    end
  end

在上面的代码中,我了解到todo_itemstodo_lists的嵌套资源,但是我不知道 patch :complete 在做什么。我所知道的是,上面的代码为我提供了一条新路径,complete_todo_list_todo_item_path

代码是否必须在成员块中?成员块的目的是什么?

成员路由需要ID,因为它作用于成员。 在你的情况下,它将生成 url 像这样的东西

url => todo_lists/:todo_list_id/todo_items/:todo_item_id/complete

helper method =>  complete_todo_list_todo_item_path(todo_list_object, todo_item_object)

如果您定义 collection 而不是 member 那么它不会占用任何 ID。

A member block 当你在你的模型中需要一个额外的路由时,当你创建一个资源时,你正在创建个人(需要模型的 id)和集合资源,例如:get为个人路由,index为集合路由。

现在,如果您想要同一模型上的另一条路线,您可以使用 member 块来创建新的个人路线collection 块,如果您需要收集路线

在您的示例中,您为 todo_items 中的一个创建补丁路由,它像其他资源一样嵌套在 todo_lists 上。