[英]rails has_many association
我有3個簡單的模型
class Alpha < ActiveRecord::Base
has_many :betas
has_many :gammas
end
class Beta < ActiveRecord::Base
belongs_to :alpha
before_create :gen_gamma
def gen_gamma
gamma = alpha.gammas.build
gamma
end
end
class Gamma < ActiveRecord::Base
belongs_to :alpha
end
我希望每當創建一個新的Beta時,它也應該是一個新的Gamma。 兩者都與alpha關聯。
這是我的單元測試
require 'test_helper'
class BetaTest < ActiveSupport::TestCase
test "creating a beta should create a gamma" do
a = Alpha.new
b = a.betas.build
a.save
assert a.gammas.size > 0, "alpha should have gammas"
end
end
將調用before_create回調,但不會保存關聯的gamma,而保存beta。
奇怪的是
a = Alpha.new
b = a.betas.build
g = a.gammas.build
a.save
作品!
您正在構建伽瑪,但不保存Alpha,這也會保存伽瑪。 您可以使用create
而不是在gamma上build
來解決該問題。 與build
不同, create
保存記錄。
def gen_gamma
alpha.gammas.create
end
您需要做的是在has_many
上使用inverse_of
選項:
class Alpha < ActiveRecord::Base
has_many :betas, :inverse_of => :alpha
has_many :gammas, :inverse_of => :alpha
end
class Beta < ActiveRecord::Base
belongs_to :alpha, :inverse_of => :betas
before_create :gen_gamma
def gen_gamma
alpha.gammas.build
end
end
class Gamma < ActiveRecord::Base
belongs_to :alpha, :inverse_of => :gammas
end
或更簡單的方法,將before_create
移到Alpha
:
class Alpha < ActiveRecord::Base
has_many :betas
has_many :gammas
before_create :gen_gamma
def gen_gamma
gammas.build
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.