我試圖創建自定義表單,允許管理員切換用戶的用戶權限,並將其保存到數據庫中。我必須做一些完全錯誤的事情,因爲頁面生成良好,並且提交按鈕提交給操作正常,但沒有任何操作保存到數據庫,它只是再次呈現我的初始視圖。任何人都可以看到我做錯了什麼?如何在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