2009-06-23 2 views
10

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

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

В моем шаблоне show.html, а не собирается

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

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

Спасибо!

ответ

32

Что-то вроде

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

может сделать трюк.

Matt

+0

Спасибо! Точно то, что я тоже хотел! .humanize huh! Я думаю, что мне это нужно для моих детей иногда – Michael

+0

Приятный трюк, Rails, всегда <3 – Unitech

+2

люблю его! Я закончил использование: '<% для атрибута в ['name', 'age', 'etc']%>' Показывать только те поля, которые я хочу показать. – DavidG

4

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

<%= User.column_names.collect { |col_name| "#{col_name.capitalize}: <p>#{@user[col_name]}</p>" }.join("\n") %> 
+0

Спасибо! Именно то, что я хотел! – Michael

0
@user.attributes.each{|key, value| puts "#{key} : #{value}"} 
0

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

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

для того, чтобы отобразить whilelist свойств.

2
<%= debug @user %> 

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

0

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

- for attribute in @user.attributes.keys 
    %p 
    = attribute.humanize 
    = @user.attributes[attribute].to_s 
Смежные вопросы