Я пытаюсь создать настраиваемую форму, которая позволяет администраторам включать и отключать пользовательские привилегии пользователей и сохранять их в базе данных. Я, должно быть, делаю что-то совершенно неправильно, потому что страницы генерируются нормально, а кнопка отправки подчиняется действию нормально, но ничего не сохраняется в базе данных, и он просто снова отображает мое первоначальное представление. Кто-нибудь может увидеть, что я делаю не так?
Код
Маршруты:
resources :users do
member do
get 'assign'
put 'assign_update'
end
end
...
Контроллер (Этот странный способ сделать это - попытка обойти тот факт, что администратор и другие атрибуты недоступны. Это может быть беспорядок.):
...
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 %>
render 'assign'
, потому что оно не сохраняется. URL-адрес изменится на assign_update, и если я сниму флажок, он останется непроверенным, но при проверке базы данных через консоль атрибут администратора не изменится. - person Glynne McReynolds   schedule 22.02.2013admin_protected = params[:user].delete(:admin)
кажется подозрительным. Разве эта строка не всегда удаляет атрибутadmin
из пользовательского параметра? - person Jason Kim   schedule 22.02.2013admin_protected
, после чего он все равно бесполезен. Это немного пережиток того времени, когда я пытался сделать это немного по-другому. Это не работает, даже если я его поменяю. В любом случае переменной по-прежнему присваивается то же значение. - person Glynne McReynolds   schedule 22.02.2013save!
вместоsave
. - person Jason Kim   schedule 22.02.2013update_attribute
метод. Кажется, что проверка модели пропускается и защита массового размещения - это именно то, что вам нужно. - person Jason Kim   schedule 22.02.2013update_attribute
делает свое дело! Спасибо! Также, если вы хотите отправить это в качестве ответа, я приму. - person Glynne McReynolds   schedule 22.02.2013