我需要这样做:

class PlanetEdge < ActiveRecord::Base
  enum :first_planet [ :earth, :mars, :jupiter]
  enum :second_planet [ :earth, :mars, :jupiter]
end

其中,我的表是一个边表,但每个顶点都是一个整数。
然而,在rails中,abvove似乎是不可能的。制作字符串列的替代方法是什么?

最佳答案

也许它可以把地球作为另一个模型?

class Planet < ActiveRecord::Base
  enum type: %w(earth mars jupiter)
end

class PlanetEdge < ActiveRecord::Base
  belongs_to :first_planet, class_name: 'Planet'
  belongs_to :second_planet, class_name: 'Planet'
end

您可以使用accepts_nested_attributes_for创建Plantedge:
class PlanetEdge < ActiveRecord::Base
  belongs_to :first_planet, class_name: 'Planet'
  belongs_to :second_planet, class_name: 'Planet'

  accepts_nested_attributes_for :first_planet
  accepts_nested_attributes_for :second_planet
end

PlanetEdge.create(
  first_planet_attributes: { type: 'mars' },
  second_planet_attributes: { type: 'jupiter' }
)

07-25 20:52