Rails属于通过具有唯一性范围的解决方案

时间:2014-09-14 00:56:00

标签: ruby-on-rails rails-activerecord

我有以下链接模型:

class Event
   has_many :orders
   has_many :tickets, through: :orders
end

class Order
   belongs_to :event
   has_many :tickets
end

class Ticket
   belongs_to :order
   ? :event, ?: :order

   validates :name, uniqueness: { scope: :event }  
end

问题在于,无论我在上面的两个?标记中填写什么,在验证我的Ticket模型的实例时会出现不同的错误。我试过的组合:

  • delegate / to:这是最干净的解决方案。但是,在验证故障单时,会发生以下错误:no such column: tickets.event
  • has_one / through:这实际上是不好的做法,因为这会在保存时触及事件模型。这里的错误是:undefined method 'event_id' for #<Ticket:0x0000010787c730>

乍一看,似乎是一种干净利落地检查单个活动的故障单上的名称是否唯一的方法。我错过了什么吗?这个问题有什么干净的解决方案吗?

提前致谢,

汤姆

1 个答案:

答案 0 :(得分:0)

您不需要question mark line。而是尝试将验证更改为

validates :name, uniqueness: true, scope: :event

您的故障单模型应始终belong_to :event。下订单时,故障单应与事件和订单相关联。这意味着您需要将event_id:integer添加到故障单模型中。