2016-04-16 10 views
0

私は、Railsアプリケーションが安全にアソシエーションを構築していることを保証しようとしており、本質的に別のモデルで所有されているモデルをどのように扱うべきかはわかりません。モデルアソシエーションを安全に構築する

例は、私が十代の娘を持つ父親であるということです。彼らはいくつかのリンゴ製品を所有している。製品は技術的にそれらに属しますが、私はそれをすべて支払った - 私はそれを所有しています。

さらに、私は娘に新しいリンゴ製品を与えるだけで知らないことを望んでいません。

このためのコードは次のようになります。

class Father 
    has_many :teenage_daughters 

    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 
end 

class TeenageDaughter 
    belongs_to :father 

    accepts_nested_attributes_for :apple_products, 
           reject_if: :all_blank, 
           allow_destroy: true # oh yeah 
end 

class AppleProduct 
    belongs_to :teenage_daughter 
    # Should i be doing something like this? 
    # belongs_to :father 
end 

私の質問は:私はcurrent_userを設定AppleProduct Sを作成するたび

は私がAppleProductと何とかの内側BACK父へbelongs_to関係を追加するべきか?

私は間違いを犯すことに心配しています。何らかの理由で作成されたリクエストを許可すると、行に関連していないユーザーアカウントとの関連付け/関連付け解除が可能になります。

答えて

2

私はあなたが言った何かを引用してみましょう:

を、私はそれをすべてのために支払った - 私は、これが意味することはAppleProductモデルは父親が所有資産を表していることである

それを所有しますあなたは誰か(この場合は子供たち)にそれを使用させるようにしています。これは、私の意見では、あなたの実際の生活のモデルに近い方法です:

class Father 
    has_many :apple_products 
    has_many :teenage_daughters 
end 

class TeenageDaughter 
    belongs_to :father 
end 

class AppleProduct 
    belongs_to :owner, class_name: 'Father' 
    belongs_to :user, class_name: 'TeenageDaughter' 
end 

これを行うことにより、あなたがownerおよびそれらの製品のuserが誰であるかの明示的な表現を持っています。

また、ご質問には関係ありませんが、TeenageDaughterからChildに名前を変更することを検討してください。

関連する問題