Rails - простой способ отобразить все поля в поле зрения - PullRequest
11 голосов
/ 23 июня 2009

ОК, я уверен, что что-то здесь не хватает, но, пожалуйста, прости меня, я новичок в Rails.

Есть ли какой-либо способ в Rails отображать все поля для объекта, а не указывать каждое из них?

В моем шаблоне show.html вместо того, чтобы идти

<p>Name: <%=h @user.full_name %></p>
<p>Email: <%=h @user.email %></p>

Я просто хочу, чтобы oneliner сделал это без необходимости набирать каждое из примерно 15 полей, которые у меня есть. Это страница администратора, поэтому хорошо, если отображаются все поля (id, creation_at и т. Д.) Если бы это был PHP, мне потребовалось бы около 5 секунд, используя foreach, но я погуглил (очевидно, на неправильные вещи) в течение часа без удачи.

Спасибо!

Ответы [ 6 ]

36 голосов
/ 23 июня 2009

Что-то вроде

<% for attribute in @user.attributes.keys %>
  <p><%= attribute.humanize %> <%= @user.attributes[attribute].to_s %></p>
<% end %>

может добиться цели.

Мэтт

4 голосов
/ 23 июня 2009

Полагаю, вы хотите отобразить все атрибуты строки из таблицы базы данных, которая определена как модель ActiveRecord. Вы можете использовать метод класса column_names (он есть у каждой модели ActiveRecord), который возвращает имена столбцов таблицы в массиве.

<%= User.column_names.collect { |col_name| "#{col_name.capitalize}: <p>#{@user[col_name]}</p>" }.join("\n") %>
2 голосов
/ 15 октября 2014
<%= debug @user %>

простой способ показать объект ... это то, что я обычно использую в любом случае!

0 голосов
/ 13 июля 2016

Если вы используете haml и хотите перебрать атрибуты, например, пользовательского объекта в представлении:

- for attribute in @user.attributes.keys
  %p
    = attribute.humanize
    = @user.attributes[attribute].to_s
0 голосов
/ 28 августа 2013

Это фрагмент, который я использовал для добавления в черный список некоторых атрибутов, которые я не хотел показывать ...

контроллер (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

view (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)

для отображения списка свойств.

0 голосов
/ 22 мая 2013
@user.attributes.each{|key, value| puts "#{key} : #{value}"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...