0

小さなシステム用に3つのモデルを作成しました。ここでの目的は、ユーザー、企業、およびそれらの関係を処理することです。交差点で多くのルックアップを実行することを期待しています。また、ユーザーは1つの会社にしか所属できませんが、会社は多くのユーザーを持つことができるため、使用可能な結合を厳密に制御したいと考えています。これを表現する最良の方法は以下のとおりだと思います。この前置詞についてフィードバックをお願いします。これまでのところ、私のテストは私の論文を検証するためにうまく機能し、いくつかの小さな実装作業はうまくいきましたが、ユーザーのリストを調べて彼らの会社を見つけると、どういうわけか問題に遭遇し、has_one関係に関連していると感じます、しかし、確かではありません。建設的なフィードバックに改めて感謝します。

class User < ActiveRecord::Base
has_one  :companyrelationship, foreign_key: "user_id"
has_one  :company, :through => :companyrelationship, dependent: :destroy

class Company < ActiveRecord::Base
has_many :companyrelationships
has_many :users, :through => :companyrelationships

class CompanyRelationship < ActiveRecord::Base
belongs_to :company
belongs_to :user

validates :user_id, presence: true, uniqueness: true
validates :company_id, presence: true
4

1 に答える 1

0

私が確信しているのはエラーであり、機能しないことが 1 つあります。また、建設的な批判のいくつかのポイントを追加しようとすることもできます.

エラーは、キャメルケースのモデル名がアンダースコア (申し訳ありませんが、その用語を今思い出せません) に変換されることです。companyrelationship へのすべての参照には、アンダースコアを追加する必要があります。:class_name 属性を設定することで規則をオーバーライドできますが、それはあなたが望んでいたことではないと思います。

技術的に間違っているわけではありませんが、ほぼ間違いなくあなたが望むものではない別の問題は、dependent: :destroyを削除したCompanyときに が削除されるということUserです。(実際、関係でうまくいくかどうかはわかりませんdependent: :destroythrough:)あなたが望んでいたのは、単に削除することだったと思いますCompanyRelationship。このリンクで、依存関係に関するセクションを読むことができます。

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

次のポイントは、デフォルトforeign_keyがモデル +_idであるため、この場合は指定する必要がないことです。

私の最後のポイントは、純粋にスタイルの好みです。検証タイプごとに検証を行うのが好きです。あなたはそれらを変数でやっています。それらは機能的に同等であるため、一粒の塩でそれを取るように感じます. (私はかなり確信userしておりuser_id、同等ですが、user_idより快適な場合は自由に固執してください。)

それが完全に私次第であれば、次のようにコーディングします。

class User < ActiveRecord::Base
  has_one  :company_relationship, dependent: :destroy
  has_one  :company, through: :company_relationship

class Company < ActiveRecord::Base
  has_many :company_relationships
  has_many :users, through: :company_relationships

class CompanyRelationship < ActiveRecord::Base
  belongs_to :company
  belongs_to :user

  validates_presence_of :user, :company
  validates_uniqueness_of :user

それがあなたがさらに進むのに役立つことを願っています。

于 2013-01-03T23:34:05.713 に答える