Rails - Простой способ отображения всех полей в поле зрения

StackOverflow https://stackoverflow.com/questions/1031175

  •  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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top