2017-02-09 2 views
1

次のような別の方法があるかどうか不思議です。find_or_create_by hmtアソシエーションを使用して重複するレコードを作成しようとしています

セットアップ:2、名前:C2(IDと

class Cabin < ApplicationRecord 
    has_many :feature_groupings 
    has_many :features, through: :feature_groupings 
end 

class Feature < ApplicationRecord 
    has_many :feature_groupings, dependent: :destroy 
    has_many :cabins, through: :feature_groupings 

    validates_uniqueness_of :name 
end 

class FeatureGrouping < ApplicationRecord 
    belongs_to :feature 
    belongs_to :cabin 
end 

c1 = Cabin.create(name: "Standard") 
c2 = Cabin.create(name: "Luxury") 
c1.features.create(name: "Wifi") 
f = c2.features.find_or_create_by(name: "Wifi") 

これは

2.4.0 :006 > f.errors.full_messages 
=> ["Name has already been taken"] 

につながる機能( "無線LAN":1、名前id)を関連付けるクリーナー方法はあります:単により「ラグジュアリー」):

c2.features << Feature.find_or_create_by(name: "Wifi") 

私はにHMTの関連付けを使用して、レールの魔法のいくつかの並べ替えがあると予想していました機能です。

Railsのバージョン:5.0.1

Rubyのバージョン:2.4.0

答えて

0

私は問題があると信じて、そのこのことで:あなたが検索または作成しようとしている

f = c2.features.find_or_create_by(name: "Wifi") 

をc2に関連する機能内の機能。それが失敗する理由です。そうではありません。私は既存の機能を追加したいので、これを行うより良い方法はないと思います。

関連する問題