2016-06-22 2 views
0

私は多くの同様のSO投稿を読んでいますが、私がここにいるルーティングエラーを解決するものは見つかりません。私は基本的なwikiのタイプのアプリを作ってるんだと(falseからuser.premium?ためのブール値を変更)premiumからstandardへのユーザーの格下げは、私がしたいときに、このアクションはまたのためのブール値を変更するには、すべての彼らのwikisのでwiki.private?falseです。リンクはdevise/registrations/edit.html.erbページにある:データベース内のブール値を更新するために `link_to`を使用する

<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 %> 

そして、ここではusers_controllerです:

match "users/:id/downgrade" => "users#downgrade", :as => "downgrade_user", via: [:get, :post] 

アクションが正常にユーザーをダウングレードが、私:

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 

そして、ここでは、ルートでありますすべてのプライベートを公開しようとするとテンプレートの不足エラーが発生する:

Missing template users/downgrade, application/downgrade with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee]}. 

これはルーティングが間違っていると思われます。私がどこに間違っているのか誰にでも見える?

答えて

0

ユーザーをダウングレードするためのすべてのビジネスロジックを実行したら、何をしたいですか?

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

偶然、ユーザー登録の編集ページがもう一度表示されます。 – Liz

+0

[OK]をクリックし、_downgrade_アクションの最後に追加します。 – Leito

+0

ああ!完璧。ありがとうございました! – Liz

関連する問題