[英]ruby-on-rails - custom method and link_to
我有一個包含用戶和項目的程序(很多關系)。 我想創建自己的方法:從特定用戶刪除所有項目,並從特定用戶刪除特定項目,但是我無法處理。 我不了解路線的可能性很大(很大)。
在下面插入代碼以刪除特定用戶的所有項目。
在我的user_controller.rb中,我有:
def delete_projects_from_user
@user.projects.delete_all
end
在show.html.erb link_to中:
<%= link_to 'Delete all projects', @user, method: :delete_projects_from_user, data: { confirm: 'Are you sure?' } %>
在路線中,我嘗試了以下兩個選擇:
resources :users do
get 'delete_projects_from_user', on: :member
end
要么
post '/users/:id', to: 'users#delete_projects_from_user', as: :delete_projects_from_user
第一個選項拋出:“沒有路由與[POST]相匹配/用戶/(id)”第二個選項什么也不做。
我將不勝感激。
為了這
def delete_projects_from_user
@user.projects.delete_all
end
您最好使用.destroy_all來確保該對象及其所有關聯項也被銷毀
.delete_all僅刪除對象,並將相關條目保留在數據庫中
至於:
<%= link_to 'Delete all projects', @user, method: :delete_projects_from_user, data: { confirm: 'Are you sure?' } %>
在您的路線中,您將路線定義為發布,因此應該
method: :post
像這樣
<%= link_to 'Delete all projects', @user, method: :post, data: { confirm: 'Are you sure?' } %>
而且這里您沒有正確添加路線,應該像這樣
<%= link_to 'Delete all projects', YOUR_ROUTE_path(@user), method: :post, data: { confirm: 'Are you sure?' } %>
雖然建議像這樣定義此路線
delete '/users/:id', to: 'users#delete_projects_from_user', as: :delete_projects_from_user
至於第二個選項,您也可以使用collection
resources :users do
collection do
delete 'user/:id', to: 'users#delete_projects_from_user', as: :delete_projects_from_user
end
end
並將鏈接修改為
<%= link_to 'Delete all projects', delete_projects_from_user(@user), method: :delete, data: { confirm: 'Are you sure?' } %>
這兩個選項都很好,建議使用第二個刪除選項
基本格式:
<%= link_to 'DISPLAY TEXT', YOUR_ROUTE_path(@object), method:
:HTTP_METHOD, data: { Additional html params } %>
解決方法如下:
<%= link_to 'Remove All Projects', delete_projects_from_user_path(@user), method: :post, data: { confirm: 'Are you sure?' } %>
然后在您的方法中:
def delete_projects_from_user
user = user.find(params[:id])
user.projects.delete_all
redirect_to :back #if nothing to render
end
我相信這可能對您有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.