Ich habe viele ähnliche SO-Beiträge gelesen, kann aber keine finden, die den Routing-Fehler, den ich hier habe, löst. Ich mache eine grundlegende Wiki-Typ App und wenn ein Benutzer Herabstufungen premium
-standard
(den Booleschen Wert für user.premium?
-false
zu ändern), ich diese Aktion möchte auch die booleans für ihre alle wikis
zu ändern, so wiki.private?
ist false
. Der Link ist auf der devise/registrations/edit.html.erb
Seite:Verwenden von `link_to` zu aktualisieren Boolean in Datenbank
<h3>Change My Account Type</h3>
<% if current_user.premium %>
<p><%= link_to "Downgrade my account from premium.", downgrade_user_path(current_user), confirm: "Are you sure?" %></p>
<% else %>
<p><%= link_to "Upgrade to premium!", new_charge_path %>
<% end %>
Und hier ist die users_controller
:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
@wikis = current_user.wikis
@private_wikis = @wikis.where(private: true)
@public_wikis = @wikis.where(private: false)
end
def downgrade
@wikis = current_user.wikis
@user = User.find(params[:id])
@user.update_attribute(:premium, false)
@wikis.each do |wiki|
wiki.update_attribute(:private, false)
end
end
end
Und hier ist die Route:
match "users/:id/downgrade" => "users#downgrade", :as => "downgrade_user", via: [:get, :post]
Die Aktion erfolgreich den Benutzer degradiert, aber ich einen fehlenden Vorlagenfehler erhalten, wenn man versucht, den ganzen wikis
Öffentlichkeit zu bilden:
Missing template users/downgrade, application/downgrade with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee]}.
Das lässt mich denken, dass es etwas mit dem Routing ist, das schief geht. Kann jemand sehen, wo ich hier falsch liege?
Ja, im Idealfall sehen Sie einfach die Benutzerregistrierungsseite erneut bearbeiten. – Liz
Ok, dann mach weiter und füge das am Ende deiner _downgrade_ Aktion hinzu. – Leito
Ahhh! Perfekt. Vielen Dank! – Liz