2011-10-22 8 views
0

私はしばらくこれに苦しんでいました。Deviseを使用して、ユーザーが自分に属するアイテムを編集/表示できるようにするにはどうすればいいですか

私は、ユーザーがDeviseを使用して作成したアイテムのみを編集/表示できるようにしようとしています。

私はユーザーをセットアップし、うまく働いています。アイテムは、それらに関連付けられたユーザーで作成されており、レールコンソールでこれを確認できます。私が今やろうとしています何

def create 
@item = Item.new(params[:item]) 
@item.user = current_user 
end 

は一度ログインし、ユーザーが唯一の自分が作成したアイテム、およびなし他の人を見ることができるようにそれを作ることです。

def index 
@items = Items.all 
end 

def index 
@items = current_user.Items.find(params[:id]) 
end 

ではなく、これは私のために働くように見えるdoens'tと私は

undefined method `Items' for #<User:0x007fdf3ea847e0> 

缶だれでもプランを取得:私のアイテムコントローラで

は、交換しようとしています次の試しに何をアドバイスしますか?

ありがとうございます。何をしようとしていることは本当に近いです

+0

deviseは認証フレームワーク/宝石です。あなたが探しているのは、認可宝石です。私はcancanがそれのための現在のgotoだと思うが、かなり多くがある。ほとんどの人は、護衛士/魔法使いとうまく動作します。 –

+0

[セットアップDeviseは自分のレコードを編集できるようにするには?](http://stackoverflow.com/questions/3966344/setup-devise-to-only-allow-editing-of-自分のレコード) – Mark

答えて

2
  1. を使用することができ、またcurrent_user.items.find(params[:id])

    をしたい

    を(Itemクラスもbelongs_to :userを持っている場合、それは同様userと呼ばれる方法があるでしょう)たぶん私は古い学校ですが、私はレコードを見つけるためにcurrent_userを使用せず、権限を確認するだけです。実際にdoesnの `tあなたがいることをやらせる工夫、アクセス権を設定するよう

    @items = Item.find(:all, :conditions => { :user_id => current_user[:id] }

または

@items = Item.find_all_by_user_id current_user[:id] 

:私は直接、主キーの関係を(彼らは変更されません)を使用しますしかしCancanと呼ばれる優れたサプリメントがあります。あなたは間違いなくそれを調べなければなりません。 Cancanを使用すると、権限を定義するability.rbクラスが作成されます。あなたが、その後を探していると、次のようになります。

カンカンのドキュメントは、上記のコードを明らかにするだろう読ん
class Ability 
    can [:read, :show, :edit, :update, :delete, :destroy], Item do |item| 
    item.user_id == user.id 
    end 

    # or 
    can :manage, Item do |item| 
    item.user_id == user.id 
    end 
end 

+0

これは治療になりました。私はまたThinkVitaminの本当に素晴らしいシリーズを見つけました。これは、私が必要とする残りの部分と断片を私に与えました。どうもありがとう! – Paul

1

...

current_userUserクラスの「インスタンス」です。

あなたがしたいことは、すべてのユーザーに適用される特別な方法である「items」というユーザーインスタンスからの関連付けを使用することです。あなたはそれを作成するときに、あなたもcurrent_user.items.create(params[:item])

+0

ええ、ありがとうBen。私はそれを試みました。今すぐ取得しています IDなしのアイテムを見つけることができませんでした 私はとても近づいているように感じます。 – Paul

+0

実際に '' 'CanCan'''の最新バージョンでは、' 'current_user.items'''はうまくいくでしょう。 – Cacofonix

1

私はあなたの質問を理解している場合、CanCanのような認証ライブラリをチェックアウトしたいと思うかもしれません。

https://github.com/ryanb/cancan

それは、このような権限のタイプのものを処理するために、かなり滑らかな動作します。多くの人がこのライブラリをDeviseと併用しています。

+0

ありがとう - 私はCanCanを一点で試しましたが、私はかなり緑色なので、複雑さが増して私の心が吹きました。私は今非常に近い(編集/表示を制限することができます)ので、私はそれだけで、ユーザーがインデックスビューで独自の項目を表示できるようにしています。 – Paul

関連する問題