我有一个发起人模型和一个促销代码模型。


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


因此,促销代码应具有对发起人的可选引用,即,可能没有值的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/

10-14 17:00
查看更多