我试图创建自定义表单,允许管理员切换用户的用户权限,并将其保存到数据库中。我必须做一些完全错误的事情,因为页面生成良好,并且提交按钮提交给操作正常,但没有任何操作保存到数据库,它只是再次呈现我的初始视图。任何人都可以看到我做错了什么?如何在Rails中正确创建自定义操作?
守则
路线:
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 %>
当你说“它只是渲染我的初始视图”,你的意思是它呈现分配视图? – 2013-02-22 18:24:45
它显示了分配视图的内容是,我假设它是'render'assign''的结果,因为它不保存。 url更改为assign_update,如果我取消选中该框,它将保持未选中状态,但通过控制台检查数据库时,admin属性保持不变。 – 2013-02-22 18:26:53
好的。这可能与问题没有直接关系,但是'admin_protected = params [:user] .delete(:admin)'似乎是可疑的。这行不会总是从用户参数中删除'admin'属性吗? – 2013-02-22 18:30:32