Я только что закончил просмотр railscast episode #189, и он использовал бит_маску для сохранения значения в таблице users. Я пытаюсь реализовать одно и то же, но когда я проверяю через irb, я получаю ошибки. Сначала кто-нибудь может объяснить, что это на самом деле происходит. Я знаю, что первая линия делает и часть второй линииМожете ли вы объяснить, что делает этот фрагмент кода?
ROLES = %w[admin moderator author]
def roles=(roles)
self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.sum
end
def roles
ROLES.reject { |r| ((roles_mask || 0) & 2**ROLES.index(r)).zero? }
end
В IRB я получаю это:
irb(main):013:0> ROLES = %w[admin moderator author]
(irb):13: warning: already initialized constant ROLES
=> ["admin", "moderator", "author"]
irb(main):014:0> roles = %w[admin author]
=> ["admin", "author"]
irb(main):015:0> roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.sum
NoMethodError: undefined method `sum' for [1, 4]:Array
'Enumerable # sum' - это добавление Rails, определенное в' rails/activesupport/lib/active_support/core_ext/enumerable.rb' –