Я пытаюсь создать пользовательскую форму, которая позволяет администраторам включать и отключать пользовательские привилегии пользователей и сохранять их в базе данных. Я должен делать что-то совершенно неправильное, потому что страницы генерируются отлично, а кнопка отправки подчиняется прекращению действия, но ничего не сохраняется в базе данных, и она просто возвращает мое первоначальное представление снова. Может ли кто-нибудь увидеть, что я делаю неправильно?Как правильно создать настраиваемое действие в Rails?
Кодекс
Маршруты:
resources :users do
member do
get 'assign'
put 'assign_update'
end
end
...
Controller (Этот странный способ делать это попытка обойти тот факт, что администратор и другие атрибуты не доступны Это может быть беспорядок..):
...
def assign
@user = User.find(params[:id])
end
def assign_update
admin_protected = params[:user].delete(:admin)
@user = User.find(params[:id])
@user.admin = admin_protected
if @user.save
flash[:success] = "User updated"
redirect_to users_path
else
render 'assign'
end
end
Вид:
...
<%= form_for(@user, url: { controller: 'users',
action: 'assign_update'}, method: 'put') do |f| %>
<%= f.label :admin, 'Is admin?', class: 'checkbox inline' %>
<%= f.check_box :admin %>
<%= f.submit "Save changes", class: "btn btn-large btn-primary" %>
<% end %>
Когда вы говорите, что «это просто возвращает мой первоначальный вид снова», вы имеете в виду, что он отображает представление назначения? –
Он показывает содержимое представления назначения yes, которое я предполагаю, является результатом 'render 'assign'', потому что он не сохраняет. URL-адрес изменится на assign_update, и если я сниму флажок, он останется непроверенным, но при проверке базы данных через консоль атрибут admin не изменится. –
Хорошо. Это может быть не напрямую связано с проблемой, но 'admin_protected = params [: user] .delete (: admin)' кажется подозрительным. Не будет ли эта строка всегда удалять атрибут 'admin' из пользовательского параметра? –