我有一个发起人模型和一个促销代码模型。
赞助商可以具有零个或多个促销代码
促销代码可以有零个或一个赞助商
因此,促销代码应具有对发起人的可选引用,即,可能没有值的sponsor_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_many
带有has_one
的示例。 最佳答案
这看起来像一个简单的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_many关系且要更改为has_one且不想重组现有表时使用。
关于ruby-on-rails - 在Rails模型中指定可选引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21993804/