2012-03-20 10 views
1

Rails 3 - 多対多 - どのようにしますか?私はStackOverflowの上の答えの多くを発見したが、私はちょっと私は私がしなければならないものを言葉で説明するの最初のを試してみましょう。この1 にこだわって

私は複数のアプリケーションを持って、各アプリケーションは、1つまたはを持つことができます複数のプロファイル(1対多)。 私はまた、さまざまなプロファイルを通じて各アプリケーションにアクセスできるユーザーもいます。各プロファイルには複数のユーザーが存在することができます(多対多)。 ここまで問題はなく、ユーザーに付与されているすべてのプロファイルを取得できます。

ただし、ここで問題となるのは、アプリケーションからの各プロファイルについて、ユーザーは各アプリケーション固有のユーザー名を持っていることです。ユーザーの詳細を見ると、彼は彼が各アプリケーションのために割り当てられたユーザー名と一緒にいるすべてのプロファイルの一覧を見たいと思っています...

私は確かにこれを行う簡単な方法ですいつものようにレールで、しかし私はそれを見つけるように見えません。あなたはどうしますか?

答えて

2

私はこれを持っていることを確認する:アプリケーションは多くのプロファイルを持つことができ、ユーザーは多くのプロファイルを持つことができます。これは、プロファイルがファーストクラスのオブジェクトであるため、アプリケーションとユーザーの単純な多対多の関係ではありません。

Railsは、両端のモデルで宣言されたhas_and_belongs_to_many(HABTM)の関連付けを使用して、単純な多対多の関係を処理します。真ん中にあるものは重要ではなく、単に2つのモデルに参加(関連)する役目を果たします。

あなたのケースはもっと楽しいです。あなたの多対多は "has_many:through"としてRailsに記述されています。あなたのケースはそのような事例の非常に良い例だと思います。この場合、アプリケーションとユーザーのそれぞれは、プロファイルモデルを通じて多くのものを持っています。プロファイルは、2つをリンクするだけではなく、ユーザー名と、おそらく多くの他のユーザーのアプリケーションとの関係の詳細を保持しています。

このexcellent guide which should show you how (and why) to choose has_many :throughで始まり、それをすべてモデル化してセットアップする方法。これは、(あなたが示唆するように)Railsの素晴らしい機能の1つです。

私はこれが役に立ちそうです。

+0

ありがとう、これは確かに行く方法です。私はその間にそれを試していたし、それは動作します。私はそれが正しい解決策ではないことを恐れていたので、事前に質問を投稿しました...私は開発者ではありませんが、私はそれほど悪くはありません。しかし、私はプロフィールページの編集フォームに問題があります。そこからユーザーを管理できるように(追加、削除、プロファイルに新しいユーザーを追加するときに使用するユーザー名を指定できるようにする)、fields_forを使用しますが、空白のフィールドは1つしかないようです。それは別の問題だと思うので、明日は新鮮で早く戻ってきます。 – jdel

関連する問題