ruby-on-rails – 在Rails模型中指定可选引用

我有赞助商模型和促销代码模型.

>赞助商可以拥有零个或多个促销代码
>促销代码可以有零个或一个赞助商

因此,促销代码应该具有对赞助商的可选引用,即赞助商_id,其可以具有或不具有价值.我不知道如何在Rails中设置它.

这是我到目前为止所拥有的:

# app/models/sponsor.rb
class Sponsor < ActiveRecord::Base
  has_many :promo_codes  # Zero or more.
end
# app/models/promo_code.rb
class PromoCode < ActiveRecord::Base
  has_one :sponsor  # Zero or one.
end
# db/migrate/xxxxx_add_sponsor_reference_to_promo_codes.rb
# rails g migration AddSponsorReferenceToPromoCodes sponsor:references
# Running migration adds a sponsor_id field to promo_codes table.
class AddSponsorReferenceToPromoCodes < ActiveRecord::Migration
  def change
    add_reference :promo_codes, :sponsor, index: true
  end
end

这有意义吗?我的印象是我必须在我的促销代码模型中使用belongs_to,但我没有这个基础,只是我还没有看到带有has_one示例的has_many.

最佳答案
这看起来像一个简单的has_many和belongs_to关系:

# app/models/sponsor.rb
class Sponsor < ActiveRecord::Base
  has_many :promo_codes  # Zero or more.
end

# app/models/promo_code.rb
#table has sponsor_id field
class PromoCode < ActiveRecord::Base
  belongs_to :sponsor  # Zero or one.
end

has_one在这里不合适,因为它会取代has_many:即你要么拥有“has_many”和“belongs_to”或“has_one”和“belongs_to”. has_one通常用得不多:通常在你已经想要改变为has_one的has_many关系时使用它,并且不想重构现有的表.

转载注明原文:ruby-on-rails – 在Rails模型中指定可选引用 - 代码日志