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 добавляет логические методы для всех ваших столбцов, поэтому я использовал знак вопроса на столбцах.
Пожалуйста, дай мне знать, если возникнут какие-либо вопросы.