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

がブール値の場合、 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
于 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 に答える