2016-06-22 4 views
0

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?

Antwort

0

Nachdem Sie alle Geschäftslogik für das Downgrade eines Benutzers ausgeführt haben, was möchten Sie tun?

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 
    redirect_to user_registration_path 
    end 
+0

Ja, im Idealfall sehen Sie einfach die Benutzerregistrierungsseite erneut bearbeiten. – Liz

+0

Ok, dann mach weiter und füge das am Ende deiner _downgrade_ Aktion hinzu. – Leito

+0

Ahhh! Perfekt. Vielen Dank! – Liz

Verwandte Themen