簡體   English   中英

ruby-on-rails-自定義方法和link_to

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM