2011-12-06 1 views

答えて

2

あなたの質問を理解するのに少し問題があるので、質問を誤解している場合は事前にお詫びします。

現在ログインしているユーザーに属しているアイテムのみに検索を制限する方法をお探しですか?

この最初のは、このような何か項目とユーザとの間の関連付けを必要とします。

:あなたが現在 current_userを使用しているユーザでログインしてアクセスできると仮定し、その後

class User < ActiveRecord::Base 
    has_many :items 
end 

class Item < ActiveRecord::Base 
    belongs_to :user 
end 

を、あなたはそうのような検索を制限することができます

@item = current_user.items.find(params[:id]) 

編集:あなたはsession[:user_id]としてセッションに保存されているのuser_idを持っている場合は、次の操作を行うことができます

@user = User.find(session[:user_id]) 
@item = @user.items.find(params[:id]) 

いずれにしても、手順は同じです。有効なユーザーオブジェクトで開始し、itemsリレーションを使用して、そのユーザーに関連付けられている項目に範囲を制限します。

トピックから少し外れていると、セッションに直接user_idを格納することを避けたいかもしれません。スプーフィングが非常に簡単で、不要なアクセス(別の質問の会話)が可能です。

+0

私が欲しいものですが、あなたが書いたコードを使用すると、このエラーは '未定義のローカル変数またはメソッド' current_user 'for#' –

+0

ItemsControllerロジックを投稿できますか?解決策は、アプリケーションが認証をどのように処理するかによって異なります。ほとんどの認証方法は、現在ログインしているユーザーのための変数をコントローラに提供します。私が与えた例では、この変数は "current_user"でしたが、あなたのアプリケーションは別の規約を使用しているようです。 – Justin

+0

私はあなたを理解しようとしていますが、自分のアプリケーションのユーザーのための機能は、セッション[:user_id] = user.idです –

関連する問題