Я прочитал много подобных сообщений SO, но не могу найти тот, который решает ошибку маршрутизации, которую я здесь. Делаю базовое приложение вики типа и когда пользователь понижены от premium
к standard
(изменяющие логическое значение для user.premium?
к false
), я хочу, чтобы это действие также изменить булевы для всех их wikis
так wiki.private?
является false
. Ссылка на devise/registrations/edit.html.erb
страницы:Использование `link_to` для обновления Boolean в базе данных
<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
:
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
А вот маршрут:
match "users/:id/downgrade" => "users#downgrade", :as => "downgrade_user", via: [:get, :post]
Действие успешно понижен пользователь, но я получить недостающую ошибку шаблона при попытке сделать все частные wikis
общественностью:
Missing template users/downgrade, application/downgrade with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee]}.
Это заставляет меня думать, что это что-то с маршрутизацией, которая идет не так. Может ли кто-нибудь увидеть, где я здесь ошибся?
Да, в идеале просто перейдите на страницу редактирования регистрации пользователя еще раз. – Liz
Итак, затем добавьте это в конце действия _downgrade_. – Leito
Ahhh! Отлично. Спасибо! – Liz