Подтвердить что ты не робот

Учитывая модель, как перебирать все свойства?

Я хочу пропустить все свойства моей модели пользователя, как я могу это сделать?

4b9b3361

Ответ 1

Если у вас есть экземпляр вашей модели, тогда user.attributes является хешем атрибутов модели и их значений, поэтому, например, вы можете сделать что-то вроде:

user.attributes.each_pair do |name, value|
  puts "#{name} = #{value}"
end

Если у вас нет конкретного экземпляра, тогда у класса есть методы, которые возвращают информацию о полях в базе данных, например. User.columns и User.content_columns. например.

User.columns.each do |column|
  puts column.name
end

Ответ 2

Article.columns.each do |column|
  puts column.name
end

Это итерация по всем объектам столбца для модели статьи.

Ответ 3

@model.methods возвращает имена всех методов объекта.

@model.methods.grep(/= $/) вернет вам имена всех методов записи, поэтому вы можете предположить, что если у вас есть сеттер, то у вас также есть читатель, так что это может быть "свойство".

Вы также можете проверить атрибуты hash (@model.attributes), который является хэшем со всеми столбцами, определенными в базе данных, и это может быть самым надежным способом, поскольку метод "методы" может не включать считыватели атрибутов (и писателей), генерируемых динамически. (Это может зависеть от версии RubyOnRails, которую вы используете).