【发布时间】:2014-09-12 02:29:08
【问题描述】:
对于“项目”和“颜色”之间的多对多关系,我有以下类。
并且“项目”不应该有重复的“颜色”, 例如:- 如果“Item1”有“Blue”和“Red”,那么我们不能将另一个“Red”添加到“Item1”
这是正确的设置方法吗?
class Item < ActiveRecord::Base
has_many :item_colors
has_many :colors, :through => item_colors
end
class Color < ActiveRecord::Base
has_many :item_colors
has_many :items, :through => item_colors
end
class ItemColor < ActiveRecord::Base
belongs_to :item
belongs_to :color
validates_uniqueness_of :color, scope: :item
end
我的重复颜色测试。是如何测试的?
describe "item should not have duplicated colors" do
before do
@item = FactoryGirl.create(:item)
@color1 = FactoryGirl.create(:color)
@item.colors << @color1
@item.colors << @color1
@item.save
end
it { should_not be_valid }
end
当我在 Rails 控制台中尝试这个时,当我向项目添加重复的颜色时它会失败
但我没有在item.errors.message 中收到错误消息,而是收到了 ActiveRecord 异常
"ActiveRecord::RecordInvalid: Validation failed: Color has already been taken"
请指教。
【问题讨论】:
标签: activerecord ruby-on-rails-4 rspec