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>

أريد فقط أن يقوم أحد الخطين بذلك دون الحاجة إلى كتابة كل حقل من الحقول الخمسة عشر الموجودة لدي أو نحو ذلك.إنها صفحة مسؤول ، لذا فمن الجيد أن يتم عرض جميع الحقول (معرف ، تم إنشاؤها _at ، إلخ) إذا كان هذا PHP ، فسيستغرق الأمر حوالي 5 ثوانٍ باستخدام Foreach ، لكنني googled (على الأشياء الخاطئة بشكل واضح) لمدة ساعة) بدون حظ.

شكرًا!

هل كانت مفيدة؟

المحلول

وشيء من هذا القبيل

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

ويمكن أن تفعل خدعة.

ومات

نصائح أخرى

وأنا افترض أنك تريد عرض جميع سمات صف من جدول قاعدة البيانات الذي يعرف بأنه نموذج أكتيفيريكورد. يمكنك استخدام أسلوب فئة <م> COLUMN_NAMES (كل نموذج أكتيفيريكورد له ذلك)، والتي ترجع أسماء أعمدة الجدول في صفيف.

<%= 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)

من أجل عرض قائمة من الخصائص.

إذا كنت تستخدم haml وتريد أن يتكرر خلال السمات على سبيل المثال كائن المستخدم في طريقة عرض:

- for attribute in @user.attributes.keys
  %p
    = attribute.humanize
    = @user.attributes[attribute].to_s
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top