我想通过链接点击将用户切换为管理员。我根据建议改变了代码,但它仍然没有用。
控制器:
def toggle_admin
@user = User.find(params[:id])
if @user.is_admin == true
@user.is_admin = false
else
@user.is_admin = true
end
respond_to do |format|
format.html { redirect_to @users }
end
end
来自调用方法的视图中的Stement:
<td><%= link_to 'Toggle Admin', :controller => :users, :method => :toggle_admin, :id => user.id, data: { confirm: 'Toggle Admin?' } %></td>
路线:
match 'users/:id/toggle_admin' => 'user#toggle_admin'
有人看到我的错吗?感谢。
我认为我的路由可能是问题所在。查看日志如何仅显示所有用户的检索,然后显示与id匹配的用户:
Started GET "/users?data%5Bconfirm%5D=Toggle+Admin%3F&id=1&method=toggle_admin" for 127.0.0.1 at 2013-07-13 12:16:25 -0400
Processing by UsersController#index as HTML
Parameters: {"data"=>{"confirm"=>"Toggle Admin?"}, "id"=>"1", "method"=>"toggle_admin"}
User Load (36.6ms) SELECT "users".* FROM "users"
User Load (71.6ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 1]]
Rendered users/index.html.erb within layouts/application (78.2ms)
答案 0 :(得分:1)
你需要做一个
@user.save
在那里的某个地方。
此外,整个if
块可能会被
@user.is_admin = !@user.is_admin
答案 1 :(得分:1)
尝试如下;
def toggle_admin
@user = User.find(params[:id])
if @user.is_admin == true
@user.is_admin = false
else
@user.is_admin = true
end
@user.save
respond_to do |format|
format.html { redirect_to @users }
end
end
或者您也可以使用update_attributes
,如下所示
@user.update_attributes(is_admin: true)
答案 2 :(得分:1)
如果is_admin
是布尔值,您可以使用toggle来完成此操作:
def toggle_admin
@user = User.find(params[:id])
@user.toggle :is_admin
@user.save
respond_to do |format|
format.html { redirect_to @users }
end
end
答案 3 :(得分:0)
我在控制器调用中有一个缺陷。它应该是:
<%= link_to 'Toggle Admin', { :controller => :users, :action => :toggle_admin, :id => user.id} %>