2013-07-13 3 views
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 

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' 

Видит кто-нибудь мою ошибку? Благодарю.

Я думаю, что моя маршрутизация может быть проблемой. Посмотрите, как журналы показывают только извлечение всех пользователей и затем пользователь, соответствующий идентификатор:

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) 

ответ

1

Вы должны сделать

@user.save 

где-то там.

Кроме того, весь if блок, вероятно, можно было бы заменить

@user.is_admin = [email protected]_admin 
+0

Это на самом деле не работает. Started GET "/ users? Data% 5Bconfirm% 5D = Toggle + Admin% 3F & id = 1 & method = toggle_admin" для 127.0.0.1 в 2013-07-13 12:10:38 -0400 Обработка по UserController # index как HTML Параметры: {"data" => {"confirm" => "Toggle Admin?"}, "id" => "1", "method" => "toggle_admin"} Пользовательская нагрузка (38.8мс) SELECT "users". * FROM "users" Пользовательская нагрузка (36.1ms) SELECT "users". * FROM "users" WHERE "users". "Id" = $ 1 LIMIT 1 [["id", 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) 
+0

Я думал, что это сработает, но нет удачи. Кажется, это просто получение записи из db и ничего не делать с ней. –

1

Вы можете использовать toggle для достижения этой цели, если 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 
0

У меня был дефект вызов контроллера. Оно должно быть:

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

Смежные вопросы