Rails 4: Merit Gem: высушить код PointRules?

Есть ли способ немного высушить класс PointRules? Я попробовал это, но это не сработало:

%w(attr1 attr2 attr3).each do |attribute|
  score 10, on: 'comments#create', do |comment|
    comment.attribute.present?
  end
end

Это дало мне эту ошибку:

private method `attribute' called for...

ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ:

Ответ, приведенный ниже, работает, плюс вы можете СУШИТЬ свой код, делая что-то вроде этого:

%w(attr1? attr2? attr3?).each do |attr|
  score 5, on: ['comments#update', 'users#update'] do |item|
    item(attr).call
  end
  score 10, on: ['comments#create', 'users#create'] do |item|
    item(attr).call
  end
  score 15, on: ['comments#delete', 'users#delete'] do |item|
    item(attr).call
  end
end

1 ответ

Решение

Извините за ожидание:(

Вот решение, которое может вам помочь

%w(attr1? attr2? attr3?).each do |attr|
  score 10, on: 'comments#create', do |comment|
    comment.method(attr).call
  end
end

Active Record добавляет логические методы для всех ваших столбцов, поэтому я использовал знак вопроса на столбцах.

Пожалуйста, дай мне знать, если возникнут какие-либо вопросы.

Другие вопросы по тегам