0

devise current_userで、モデルの:idをusers:idと混同する問題が発生しています。

ルート:

match "/causes/:id/:slug" => "causes#show", :as => :cause, :via => 'get'
match "/causes/:id/:slug/edit" => "causes#edit", :as => :edit_cause, :via => 'get'
match "/causes/:id/:slug" => "causes#update", :via => 'put'

resources :causes, :only => [:index, :new, :create]

私の:causesコントローラーで:

before_filter :check_privileges, only: [:new, :create, :edit, :new, :update]

def check_privileges
    #when I use this code everyone can access edit, etc.
    redirect_to root_path unless current_user
end

そして私の:causesモデルでは

  belongs_to :user

何らかの理由で、current_userを使用すると、このコントローラーでは、current_userが/ causes /:id /:slug/のidと等しいと常に見なされます。

特権チェックコードをアプリケーションコントローラーに入れてみましたが、

私はこのようなコードを割り当てようとしました:

def check_privileges
    #when I use this code no one can access edit, etc
    @user = User.find_by_id(params[:id])
    redirect_to root_path unless @user
end

私は助けが必要です、誰か提案がありますか?私がしたいのは、ユーザーが現在のユーザーであることを確認することだけです。そうすれば、誰もが原因を編集できるわけではありません。

4

1 に答える 1

0

あなたの投稿は少し紛らわしいです。IIRC deviseは、現在のユーザーIDをセッションに保存し、URLから取得することはありません。

これが特権に関連する問題であることを確認し、独自のソリューションを展開します。別の方法を強くお勧めします。

https://github.com/ryanb/cancan

これはデバイスでうまく機能し、問題を解決するはずです

于 2012-05-08T13:40:04.747 に答える