كيف يمكنني تشغيل خطوط متعددة من Ruby في ملف html.erb

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

  •  29-09-2019
  •  | 
  •  

سؤال

أنا أستخدم Ruby on Rails وأحتاج إلى تشغيل كتلة من رمز Ruby في أحد ملفات HTML.ERB الخاصة بي. هل أفعل ذلك مثل هذا:

<% def name %>
<% name = username %>
<%= name %>

او مثل هذا:

<% def name
name = username %>
<%= name %>

شكرا للقراءة.

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

المحلول

من غير المعتاد تحديد طريقة في ملف ERB ، لذلك أوصي بعدمه.

إذا كنت تريد الاتصال بكتلة مثل #each, ، يمكنك أن تفعل شيئًا مثل ما يلي:

<% names.each do |name| %>
  <%= name %>
<% end %>

لا تنسى <% end %>.

نصائح أخرى

إذا كنت بحاجة إلى وظائف إضافية في عرضك ، فأنت عادة ما تعلن تلك الموجودة داخل المساعد.

لكل وحدة تحكم ، إذا كان هناك مساعد يتم تحميله تلقائيًا. على سبيل المثال ، إذا كان لديك peoplecontroller ، في app/helpers المجلد ، يجب أن يكون هناك people_helper.rb, ، وينبغي أن يبدو هكذا

module PeopleHelper
  def name
    #do something
    username
  end
end

بديل آخر نظيف للغاية ، هو استخدام مقدم نمط, ، لكنني أعتقد أنه أقل شيوعًا (للأسف).

خلاف ذلك ، إذا كنت بحاجة إلى خطوط متعددة من رمز الياقوت داخل طريقة عرض ERB ، والتي أحاول تجنبها ، فأنا أفضل النمط التالي:

<%
   counter_1 = 0
   counter_2 = 1
   do_some_more_prep_here
 %>
<% @records.each do |rec|%>
  <%# do something with the prepped date in each row %>
<% end %>

أيضًا بالنسبة لي ، فإن المسافة البادئة للأرمز أكثر أهمية من المسافة البادئة HTML ، لذلك سأفضل شيئًا مثل

<table> 
  <% @rows.each do |row| %>
    <tr>
      <td><%= row.item1 %></td>
      <% if row.some_test %>
        <td><%= row.item2 %></td>
      <% end %>
    </tr>
  <% end %>
</table>

لكنني دائمًا مهتم جدًا بسماع آراء مختلفة في هذا الشأن.

أستطيع أن أتخيل أن شخصًا ما يحتاج إليه في قالب معين (لا جدوى من إنشاء مساعد) لعدم تكرار علامة HTML. وهذا هو ، عندما الناتجة عن صفحة HTML لديها بضعة كتل مماثلة من علامات HTML. رغم ذلك ، يمكن إساءة معاملتها بسهولة (رمز غير قابل للقراءة).

<% def f1(a, b, c) %>
  test: <%= a %>, <%= b %>, <%= c %>
<% end %>

<% f1(1, 2, 3) %>
<% f1(4, 5, 6) %>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top