4

Railsの単一の属性を直接更新する方法を知りたいです。私はすでにそれを解決するために多くの方法を試しましたが、どれもうまくいきません。現在、私の見解では、次のコード行があります。

<%= link_to("Ban", admin_update_path(user), :confirm => "Are you sure?")%>

次に、私のコントローラーで:

def update 
       @user = User.first

        if @user.update_attributes(:reputation =>1)
            redirect_to admin_viewAllUsers_path, :notice => "User banned!"
        else
            render "index"
        end  

    end

それから私のルートで:

get "admin/edit"
put "admin/update"

注:ルートにput "admin / update"を使用した場合、「ルートが一致しません[GET] "/admin/update.2"エラーが発生しますが、get "admin/update"を使用した場合は取得できませんでしたエラー以外の:reputationは更新されません。ところで、:reputationは整数です。

さらに、User.firstの代わりにUser.find(params [:id])を使用すると、「IDなしでユーザーが見つかりませんでした」というエラーが発生します。

plsは役立ちます。私は何をすべきか?どこで私は間違えましたか?

4

3 に答える 3

5

単一の属性の場合、次を使用できます。

@user.update_attribute(:reputation,1)

私の意見の更新アクションでは、それは少し異なります(名前、姓などの変更)。禁止するだけでなく、アクションを作成する必要があると思いますban

    def ban 
      @user = User.find(params[:id])
      @user.update_attribute(:reputation,1)
      redirect_to admin_viewAllUsers_path, :notice => "User banned!"
    end

そしてそれのためのルート:

match 'admin/users/:id/ban', :to => 'users#ban', :as => 'admin_user_ban', :via => :post

そして最後にリンクします:

<%= link_to("Ban", admin_user_ban_path(user), :confirm => "Are you sure?", :method => :post)%>
于 2013-02-12T04:48:04.757 に答える
0

なぜだめですか

@user.reputation = 1
if @user.save
  #do something
else
  puts "Did not save"
end

あなたのaccessible_attributesに評判はありますか?

于 2013-02-12T03:51:46.613 に答える
0

あなたのルートは PUT メソッドを期待しています。これらの線に沿った何か...

<%= link_to("Ban", admin_path(user), :confirm => "Are you sure?", :method => :put)%>

routes ファイルにある edit メソッドと put メソッドは、:id 属性を示していません。あなたの場合、次のようなものです:

get "admin/:id/edit"
put "admin/:id"
于 2013-02-12T06:12:03.743 に答える