1

私は、ユーザーのスキル、会場、プロダクション、グループなどを指すように役割レコードを作成できるようにするための設定をしています。has_many?

ようにすべてのものに属している役割と役割かかわら行くすべてのものとの関係を通じて、多くを持っていると私はそれを設定:

class Role < ApplicationRecord 
    belongs_to :user 
    belongs_to :skill 
    belongs_to :production 
    belongs_to :venue 
    belongs_to :project 
    belongs_to :group 
end 

となるように、個々の役割のカテゴリを設定します。

class Group < ApplicationRecord 
    has_many :users, through: :roles 
end 

ユーザーにはもちろん、モデルの詳細がたくさんありますが、すべてが同じです。

すべてのテーブルには、名前フィールドとIDフィールドと標準のタイムスタンプフィールドがあります。

各テーブルの名前にインデックスを設定しました。

role_id、user_id、およびskill_idだけでレコードとしての役割を構築しようとすると、コンソールにエラーが表示され、すべての値が必要だと言います。

これは、役割の種類ごとにhas_many関係を構築しなければならないということですか?それとも、私が想像しているように、テーブルを通したhas_manyができますか?なぜ各フィールドのデータの存在を検証しようとしていますか?それはインデックス作成によるものでしょうか?

私はその検証をオフにしたい場合は、どこで検証を行うのかわからないので、コードをどこに置くかわからない。

答えて

1

Rails 5 belongs_toのデフォルトの動作は、親の関連付けが存在する必要があるため、ロールを保存するにはすべてのフィールドが必要です。

しかし、この動作をオフにするには、変更に:

# config/initializers/new_framework_defaults.rb 
Rails.application.config.active_record.belongs_to_required_by_default = false 
# this would disable this configuration for the entire application 

UPDATE

別のアプローチは、最も重要な関連性を把握することで、それらが利用可能であり、オプションを設定し確実にするでしょうタグ:任意の関連付けでは、

+1

私は汚いNOOBですので、私はupvoteさせませんが、ありがとう! フォローアップ:これを別の方法でモデリングする必要がありますか? – Jeremy

+0

オプションフラグを追加するための答えが更新されました。私はそれがよりよいアプローチかもしれないと思う – oreoluwa

+0

あなたがupvoteできない場合は、あなたの問題を解決する場合は、答えを受け入れることができます – oreoluwa