Как ограничить количество элементов, которые можно добавить в массив ActiveRecord - PullRequest
0 голосов
/ 09 февраля 2012

У меня похожий вопрос к этому парню Rails: как ограничить количество элементов в ассоциации has_many (из Parent)

Ключ в том, что я хотел бы сделать это на Array.push, а не на атрибуте: before_save ассоциации has_many. В 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 ]

2 голосов
/ 09 февраля 2012

Вы можете использовать обратный вызов before_add (прокрутите вниз до заголовка "Обратные вызовы ассоциации") в вашей ассоциации для принудительного поведения

Если какой-либо из обратных вызовов before_add выдает исключениеобъект не добавляется в коллекцию.То же самое с обратными вызовами before_remove;если выдается исключение, объект не удаляется.

1 голос
/ 09 февраля 2012

Немного лучше, чем обратный вызов, но не так чисто, как то, что вы пытаетесь достичь, это сделать что-то вроде channel.windows << elem unless channel.windows.length > N.

0 голосов
/ 09 февраля 2012

Почему вы не контролируете вставку окна, делая это с помощью метода,

#chanel.rb
class Chanel
  def add_window(window)
    windows.push window if windows.length < 3
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...