Rails - Простой способ отображения всех полей в поле зрения
-
06-07-2019 - |
Вопрос
Хорошо, я уверен, что здесь чего-то не хватает, но, пожалуйста, простите меня, я новичок в Rails.
Есть ли какой-то способ в Rails отображать все поля для объекта, а не указывать каждое из них?
В моем шаблоне show.html вместо того, чтобы переходить
<p>Name: <%=h @user.full_name %></p>
<p>Email: <%=h @user.email %></p>
Я просто хочу, чтобы oneliner делал это без необходимости вводить каждое из 15 или около того имеющихся у меня полей.Это страница администратора, поэтому все нормально, если показаны все поля (id, created_at и т.д.) Если бы это был PHP, использование foreach заняло бы у меня около 5 секунд, но я гуглил (очевидно, не те вещи) в течение часа, но безуспешно.
Спасибо!
Решение
Что - то вроде
<% for attribute in @user.attributes.keys %>
<p><%= attribute.humanize %> <%= @user.attributes[attribute].to_s %></p>
<% end %>
мог бы сделать свое дело.
Мэтт
Другие советы
Я полагаю, вы хотите отобразить все атрибуты строки из таблицы базы данных, которая определена как ActiveRecord model.Вы можете использовать метод класса имена столбцов (он есть у каждой модели ActiveRecord), которая возвращает имена столбцов таблицы в массиве.
<%= User.column_names.collect { |col_name| "#{col_name.capitalize}: <p>#{@user[col_name]}</p>" }.join("\n") %>
<%= debug @user %>
простой способ показать объект...это то, что я обычно использую в любом случае!
@user.attributes.each{|key, value| puts "#{key} : #{value}"}
Это фрагмент, который я использовал, чтобы занести в черный список некоторые атрибуты, которые я не хотел показывать...
контроллер (user_controller.rb)
def show
keys_blacklist = %W(user_id name) #these are the fields to hide
@user_showlist = @user.attributes.except(*keys_blacklist)
end
просмотр (show.html.erb):
<!-- language: ruby --><% for attribute in @user_showlist.keys %>
<b><%= attribute.humanize %></b>
<%= @user.attributes[attribute].to_s %>
<!-- language: ruby --><% end %>
Вы также можете использовать вместо:
@user_showlist = @user.attributes.slice(*keys_whitelist)
для того, чтобы отобразить список свойств whilelist.
Если вы используете haml и хотите перебирать атрибуты, например, пользовательского объекта в представлении:
- for attribute in @user.attributes.keys
%p
= attribute.humanize
= @user.attributes[attribute].to_s