0

ユーザーが多くのクライアントを持つことができる(ユーザー間で共有できない)アプリケーションを構築しています。

これはかなり小さなアプリケーションですが、2つのクライアントが同じ組織に属している可能性があります。したがって、組織に関するすべての情報を保持するための追加のテーブルがあると便利です。クライアントがプライベートクライアントであり、どの組織にも属していない場合もあります。

データベース設計ではこれはかなり一般的ですが、Railsでこれをどのようにモデル化できますか?

4

3 に答える 3

1

組織はユーザーとどのように関係していますか?ユーザーと組織が互いに独立している場合、最も簡単な解決策は...

User         - has_many :clients
Organization - has_many :clients
Client       - belongs_to :user, belongs_to :organization

しかし、ここにはもっと関係があると思いますか?多対多の解決策をお探しですか?

于 2012-09-30T20:07:35.587 に答える
1

答えは、@ peter-duijnsteeによって述べられたものであり、追加の制約が求められます。

class Organization < ActiveRecord::Base
  belongs_to :user
  validates :user, :presence => true
end

class Client < ActiveRecord::Base
  belongs_to :user
  belongs_to :organization

  # note the final "s", it validates a field
  validates :user, :presence => true 

  # no final "s", validate using a method
  validate :organization_user, :if => :organization_present?

  def organization_present?
    organization.present?
  end

  def organization_user
    errors.add(:organization_id, "is not allowed") unless organization.user_id == user_id
  end
end
于 2012-10-01T11:15:33.047 に答える
0
User has many clients.
Client belongs to user.

これはかなり簡単です。リレーショナルデータベースを使用している場合、「clients」テーブルには外部キー「user_id」があります。

クライアントと組織の間で、それは1対多ですか?または多対多?1対多の場合は、次のことができます

Organization has many clients.
Client belongs to organization.

多対多の場合は、マッピングテーブルが必要になります

Organization has and belongs to many clients.
Client has and belongs to many organizations.

Rails ActiveRecordの関連付けについて詳しくは、こちらをご覧ください

于 2013-12-13T16:40:47.133 に答える