2011-12-08 12 views
1

私はかなり新しいRuby on Railを使っているので、簡単なWebサイトを作成しようとしています。Rails:別のコントローラを持つデータベースからエントリを呼び出す

私は基本的に3つのテーブル(ユーザー、アイテム、カテゴリ)を持つs​​qliteデータベースを持っています。私はユーザー認証システムを作成しました

ユーザーがログインしてカテゴリに属する​​項目を追加できるようにしてから、ユーザーのアカウントのインデックスに移動して、そのユーザーの特定のユーザーが追加されました。

私はhas_manyとbelongs_toのカテゴリを持つアイテムを接続しましたが、アイテムを作成したユーザーとアイテムを関連付ける方法を理解できません。

その後、私は現在ログインしているユーザーが作成したアイテムのみを一覧表示する方法を見つけ出すことはできません。

を一言で言えば、私は(データベースのテーブル1からアイテムを呼び出す方法がわかりませんコントローラ1)データベーステーブル2のインデックス

+0

ちょうど質問ですが、なぜ3つのデータベースがありますか? 1つのデータベースに必要な数だけテーブルを作成できます。 –

+0

ああ、私は申し訳ありません、私はこれに新しい、私は3つのテーブルを持つ1つのデータベースを持っていると思います。 – Gramma42ton

+0

yup。データベースは、相互に関係する多くのテーブルの集合です。テーブルはすべて同じレコードのコレクションです。たぶん人々は "ユーザーデータベース"と言いますが、実際には "他の多くのテーブルを持つデータベースのユーザーテーブル"を意味します。 –

答えて

0

項目とカテゴリの場合と同じ種類の関係をアイテムとユーザーの間で行う必要があります。

belongs_to :category 
belongs_to :user 

あなたの商品表には、category_idとuser_idの両方の列が必要です。

明らかに、あなたのUserモデルも、あなたのCategoryモデルと同じようにhas_many :itemsを宣言する必要があります。

次に、ItemsControllerのインデックスアクションでは、単に@items = current_user.itemsと設定します。明らかに、current_userを、現在ログインしているユーザーが誰であるかを知るために設定した方法で置き換えてください。

+0

あなたは_form.html.erbを編集する必要がありますので、テーブルに新しいデータを追加するときに自動的にuser_idを現在のユーザに設定します – Gramma42ton

+0

フォーム内でそれをしません。誰かがそのフィールドに誰かのIDを持つアイテムをデータベースに追加するためのフォームを悪意を持って作成する可能性があります。代わりに、 '@item = current_user.items.new(params [:item])'や 'if @ item.save ... etc、etc ... 'のようなコントローラレベルの作成アクションで行います。 –

関連する問題