假設我有'成員'和'項目'模型。如何正確設置路線以將角色分配給用戶
「會員」和「模式」反映了多對多關聯,並通過project_members鏈接連接表。
任何成員都可以在與她相關的所有項目中扮演不一樣的角色。
我試圖寫一個「add_role」和「remove_role」的方法將角色分配給成員。
由於角色應該分配給每個項目/成員我已經構建了一個控制器'project_members_controller',我可以在那裏編寫這些方法。
雖然我很困惑,但給定了我爲這些方法定義路由的方式,我得到了具有相同路徑的兩條POST路由。因此,這聽起來像我做錯了什麼或不瞭解Rails如何工作。
目前我的路線定義爲:
resources :projects do
member do
get "collaborators", to: "members/members#index"
post "collaborators/:id/set_role", to: "project_members#set_role"
post "collaborators/:id/remove_role", to: "project_members#remove_role"
end
end
翻譯在以下路線:
Prefix Verb URI Pattern Controller#Action
collaborators_project GET /projects/:id/collaborators(.:format) members/members#index
POST /projects/:id/collaborators/:id/set_role(.:format) project_members#set_role
POST /projects/:id/collaborators/:id/remove_role(.:format) project_members#remove_role
projects GET /projects(.:format) projects#index
POST /projects(.:format) projects#create
new_project GET /projects/new(.:format) projects#new
edit_project GET /projects/:id/edit(.:format) projects#edit
project GET /projects/:id(.:format) projects#show
PATCH /projects/:id(.:format) projects#update
PUT /projects/:id(.:format) projects#update
DELETE /projects/:id(.:format) projects#destroy
URI模式就是我的目標,但是這聽起來像良好的做法?
如何使用link_to訪問add_role和remove_role方法(如果它們共享相同的路徑)。我應該只在幫手中加入一個網址嗎?和...
在做這樣的事情時使用POST還是應該使用PATCH是否正確?
我很感謝您的指導。
作爲參考我的「project_members_controller.rb」包含類似:
def set_role
@project = params[:project_id]
if @project.owner.id == current_member.id
@project_member = ProjectMember.where(project_id: @project.id, member_id: params[:id])
@project_member.add_role(:observer) if self.roles.blank?
# CODE RENDERING OUTPUT
render html: "<h1>HOLA</h1>"
else
# CODE THROWIGN AN ERROR
end
end
我明白了,但是在控制器不可用的情況下會發生什麼。在這種情況下,Rolify控制器是隱藏的。在這種情況下,RESTful路由不夠,因爲我在另一個控制器中對嗎? – Andrew
你在哪個控制器? – ashvin
根據我上面的問題,我將這些方法添加到project_members_controller.rb'中,只是因爲沒有'roles_controller.rb',因爲所有角色都由Rolify Gem管理。 我在想,也許我應該創建一個角色控制器,並按照你的建議做RESTFUL。但是,我擔心這會打破寶石。 – Andrew