如何限制可以添加到ActiveRecord数组的项目数

时间:2012-02-09 12:45:26

标签: ruby-on-rails ruby activerecord

我对这个人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

3 个答案:

答案 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