0

我的模型结构如下:

class Client < ActiveRecord::Base
   has_many :charts
end

class Chart < ActiveRecord::Base
   belongs_to :client
   has_many :chart_data
end

class ChartDatum < ActiveRecord::Base
   belongs_to :chart
end

ChartDatum 有一个名为“名称”的属性,该属性对于每个客户端都必须是唯一的。我尝试使用 “validates_uniqueness_of :name, :scope => [:chart_id]” ,但这有助于我获得特定图表的唯一键,而不是特定客户的所有图表。我正在寻找类似“validates_uniqueness_of :name, :scope => [:client_id]”之类的东西,但显然对于当前的结构它不会成功。

有人可以帮我吗?

4

1 回答 1

0

由于您需要name每个客户端的 chart_data 唯一,您可以尝试为名称编写自定义验证,如下所示:

class ChartDatum < ActiveRecord::Base
  belongs_to :chart
  validates :name, :uniqueness => true, unless => :unique_for_client?

  def unique_for_client?
    client = self.chart.client
    client.charts.chart_data.pluck(:name).include?(self.name)
  end
end
于 2013-05-17T14:01:30.343 回答