Перебор всех общедоступных атрибутов в модели

#ruby-on-rails #ruby #ruby-on-rails-4

#ruby-on-rails #рубиновый #ruby-on-rails-4 #ruby

Вопрос:

У меня есть пользовательская модель с некоторыми общедоступными атрибутами (редактируемыми пользователем) и некоторыми частными (соль и т.д.).

Предположим, что модель имеет N много общедоступных атрибутов (например, адрес электронной почты и фамилия) и M частных атрибутов (например, Salt, confirmation_token).

Хочу, чтобы я хотел сделать что-то вроде

 user.attrs.each |name, value| do 
   something(name, value) 
end
  

Могу ли я как-то использовать attr_accessor ?

Использование rails 4.0.2 и ruby 2.0.0

Есть какие-нибудь идеи? Приветствия

Комментарии:

1. покажите нам и вашу модель..

2. Объекты Ruby на самом деле не имеют общедоступных атрибутов, только общедоступные методы. По этой причине это довольно сложная проблема для решения. Однако для Rails вы можете перебирать столбцы базы данных, связанные с моделью ActiveRecord…

Ответ №1:

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

 protected_attributes = %w(password salt confirmation_token)

user.attributes.each do |name, value|
  unless protected_attributes.include?(name)
    something(name, value)
  end
end
  

Комментарии:

1. Отлично, это именно то, что я искал!