我的模型结构如下:
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有一个名为“name”的属性,每个客户端都需要是唯一的。 我尝试使用“validates_uniqueness_of:name,:scope =&gt; [:chart_id]”,但这有助于我获取特定图表的唯一键,但不能获取特定客户的所有图表。我正在寻找像“validates_uniqueness_of:name,:scope =&gt; [:client_id]”这样的东西,但很明显,对于当前的结构,它将无法解决。
有人可以帮帮我吗?答案 0 :(得分:0)
由于您需要为每个客户端使用chart_data的唯一name
,因此您可以尝试为名称编写自定义验证:
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