it-swarm.dev

إذا عبارات أخرى في .html.erb في وجهات النظر

في Rails ، غالبًا ما أواجه الموقف حيث أفعل شيئًا من هذا القبيل داخل المناظر

<% if @some_condition_previusly_established_in_a_controller %>
 <div class="one">123</div>
<% else %>
 <div class="two">something else</div>
<% end %>

يبدو فوضى بعض الشيء. هل هذه طريقة مقبولة للعمل مع وجهات النظر أم لا؟

39
dsp_099

ما لم يكن بإمكانك التفكير في طريقة لإعادة كتابة هذه الطريقة كوسيلة مساعدة ، فأنت في الأساس عالق في مظهرها القبيح. هذا هو بالضبط كيف ERB ، لأنه كان المقصود أن يكون وسيلة الحد الأدنى لحقن Ruby في قالب نص عادي خلاف ذلك ، وليس كشيء بالضرورة مبسطة أو أنيقة.

والخبر السار هو أن محرر التمييز في بناء الجملة سوف يجعل عادة <% ... %> كتل ERB الخاصة بك مختلفة بصريا عن HTML الخاص بك بحيث يمكن تحسين إمكانية القراءة بشكل كبير.

لهذا السبب أيضًا تم إنشاء تمثيلات أخرى مثل HAML حيث يكون بناء الجملة أقل تشوشًا:

- if some_condition_previusly_established_in_a_controller
  .one 123
- else
  .two something else
22
tadman

بالنسبة لواحد أو اثنين من هذا المنطق الشرطي في وجهات نظرك ، أعتقد أنه جيد ، لكن عندما يصبح رمزك أكبر ولديك عدة if..else..end وتبدو "cluttery" ، أعتقد أنه يجب عليك النظر في تطبيق "Presenter Pattern" الذي ينظف بشكل كبير وجهات نظركم عن طريق فصل منطقك إلى مقدمي العروض.

إليك برنامج تعليمي رائع تابعته من Ryan Bates في كتابه Rails سلسلة Casts على "أنماط مقدم العرض من الصفر". http://railscasts.com/episodes/287-presenters- من البداية .

9
vee

هل جربت؟

<% @some_condition_previusly_established_in_a_controller ? <div class="one">123</div> : <div class="two">something else</div> %>
5
ajthewebdev

إذا كان العرض الخاص بك يحتوي على الكثير من العلامات وعناصر HTML ، يمكنك وضعها في أجزاء ومنطق إلى نموذج

رأي:

<%= render :partial => @model.status %>

<%= render :partial => "file/path/#{@model.status}" %> # if your partial is in some different folder

إذا كانت حالتك واحدة ، فستعرض الملف _one.html.erb

إذا كان الملف ثنائيًا ، فسيعرض الملف _two.html.erb تلقائيًا.

نموذج:

def status
    if @some_condition
      "one"
    else
      "two"
    end
end
5
Sunda

نعم ، هذا هو المعيار (ونعم ، يبدو فوضى).

إذا كنت تبحث عن بديل أكثر نظافة ، فراجع: التفاف العلامة الشرطية في Rails/ERB

1
Rebitzele