1

我想通过单击链接将用户切换为管理员。我根据建议更改了代码,但仍然无法正常工作。

控制器:

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

视图中调用方法的语句:

<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)
4

4 回答 4

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)
于 2013-07-13T16:13:49.870 回答
1

如果是布尔值,您可以使用切换来完成此操作:is_admin

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
于 2013-07-13T16:15:14.910 回答
1

你需要做一个

@user.save

那里的某个地方。

此外,整个if块可能会被替换为

@user.is_admin = !@user.is_admin
于 2013-07-13T16:05:22.897 回答
0

I had a defect in the controller call. It should be:

<%= link_to 'Toggle Admin', { :controller => :users, :action => :toggle_admin, :id => user.id} %>

于 2013-07-15T13:36:40.997 回答