我对这个人Rails: How to limit number of items in has_many association (from Parent)
也有类似的问题关键是我想在Array.push上而不是在has_many关联的:before_save属性上执行此操作。在Java中,我可能会将.windows设为私有并创建自己的访问者。不确定我是否可以使用作为关联结果的ActiveRecord方法来做到这一点。
有什么建议吗?
我试图通过的规范是:
it "should not accept anymore windows" do
channel = Channel.new #with default 3 windows
channel.windows.length.should == 3
channel.windows.push Window.new
channel.windows.length.should == 3
end
答案 0 :(得分:2)
您可以在关联中使用before_add callback(向下滚动到标题"关联回调")来强制执行此行为
如果任何before_add回调抛出异常,则该对象不会被添加到集合中。与before_remove回调相同;如果抛出异常,则不会删除该对象。
答案 1 :(得分:1)
比回调更好一点,但不像你想要实现的那样干净,就是做channel.windows << elem unless channel.windows.length > N
之类的事情。
答案 2 :(得分:0)
为什么不通过方法来控制窗口插入,
#chanel.rb
class Chanel
def add_window(window)
windows.push window if windows.length < 3
end
end