簡體   English   中英

Ruby on Rails 用戶控制器的自定義控制器操作

[英]Ruby on Rails Custom Controller Action for Users Controller

處理版本:Ruby:3.0.2 Rails 6.1.4

我正在嘗試在“用戶”的視圖模板中放置一個按鈕,該按鈕會將 :mod 屬性設置為 false,而該按鈕只是“降級用戶”。

我使用輔助方法、demote_user 和一些變體讓它以某種方式工作

  <% if logged_in? && current_user.admin? %>
      <%= link_to "Demote User", user_path(@user), onclick: demote_user(@user), class: "btn btn-info" %>
  <% end %>

我搞砸了,但是在嘗試將此方法移動到控制器中以獲得最佳實踐時它正在工作。 我不確定哪種格式有效,但我嘗試了很多,例如

 :onclick => demote_user(@user)
 onclick: 'demote_user(@user)'
 onclick=demote_user(@user)
 onclick='demote_user(@user)

等等。不知何故,它最終確實奏效了,但我破壞了它。 現在,每次我加載用戶頁面時,它只是執行 demote_user(@user) 甚至不需要單擊按鈕,因此刷新用戶頁面正在降級它們。

我現在正試圖通過在 UserController 中創建一個降級方法來正確執行此操作,但我不知道如何制作路由或使其正常工作。 到目前為止,我所有的路線都在使用資源,基本的新建、創建、銷毀等。

我一直在嘗試許多不同的路線,並查看格式,但沒有運氣,通常以: Routing Error No route matches [GET] "/demote.3"

我希望能夠避免使用 Javascript onClick 功能並使用控制器正確執行此操作,即使我記得如何使其工作,但我認為我的路線、視圖頁面或控制器不正確。 以下是每個文件的內容:

控制器

def demote
  byebug
  @user = User.find(params[:id])
  @user.mod = false
  redirect_to user_path(@user)
end

看法

div class="container text-center mt-4">
  <% if logged_in? && current_user.admin? %>
      <%= link_to "Demote User", demote_path(@user), class: "btn btn-info" %>
  <% end %>
</div>

路線

Rails.application.routes.draw do

  root 'pages#home'
  get 'about', to: 'pages#about'
  resources :articles
  get 'signup', to: 'users#new'
  resources :users, except: [:new]
  get 'login', to: 'sessions#new'
  post 'login', to: 'sessions#create'
  delete 'logout', to: 'sessions#destroy'
  resources :categories
  post 'demote', to: 'users#demote'
end

到目前為止,我一直在學習一門課程,我已經掌握了其中的所有內容並添加了一些我自己的功能,但我仍然不太確定如何理解路線或它創建的路徑。

除了顯示、索引、創建、刪除、更新之外,我還想制作其他類似的自定義控制器功能,這些都是我真正了解如何構建的。 我什至不確定 POST 是否是路線中的正確調用。

我只想為資源設置一個額外的 RESTful 操作

resources :users do
  patch :demote
end
<% if logged_in? && current_user.admin? %>
  <%= button_to "Demote User", demote_user_path(@user), method: :patch %>
<% end %>

您可以使用link_to代替button_to ,但您需要使用正確的method: :patchdata: { turbo_method: :patch }選項,具體取決於您的 Rails 版本,以使 javascript 驅動程序執行其詭計。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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