[RUBY] Einige subtil unterschiedliche sich wiederholende Schreibstile in der Rails-Ansicht

Überblick

Sie sehen Code wie den folgenden. Es ist okay, weil es 4 Fälle gibt, aber wenn es 10 Fälle gibt oder wenn das Nest tief ist, macht es mich traurig. Ich möchte es einfach und mit wenigen Wiederholungen schreiben. Ich probiere einfach verschiedene Dinge aus.

<ul>
  <li>
    <div>Nutzername</div>
    <div><%= user.name %></div>
  </li>
  <li>
    <div>Mail Adresse</div>
    <div><%= user.email %></div>
  </li>
  <li>
    <div>Sex</div>
    <div><%= user.sex == 1 ? 'männlich' : 'Weiblich' %></div>
  </li>
  <li>
    <div>Rolle</div>
    <div><%= user.role %></div>
  </li>
</ul>

1. Zur einfachen Wiederholung

Draper und [Active Record Model übersetzen](https://railsguides.jp/i18n.html#active-record%E3%83%A2%E3%83] % 87% E3% 83% AB% E3% 81% A7% E7% BF% BB% E8% A8% B3% E3% 82% 92% E8% A1% 8C% E3% 81% AA% E3% 81% 86 ) Wird verwendet, um wie folgt zu multiplizieren. Wenn Sie es einfach wiederholen können, ist dies in Ordnung

<!-- sex_Fügen Sie die Textmethode zu UserDecorator hinzu.-->
<ul>
  <% %i[name email sex_text role].each do |key| %>
    <li>
      <div><%= User.human_attribute_name(key) %></div>
      <div><%= user.send(key) %></div>
    </li>
  <% end %>
</ul>

2. Für teilweise Wiederholung

Wenn etwas außerhalb des Modells in der Mitte gemischt wird, funktioniert eine einfache Schleife nicht. Dieselbe Beschreibung wird dreimal oder öfter angezeigt, kann jedoch durch die folgenden Schritte ein wenig reduziert werden

<ul>
  <% %i[name email].each do |key| %>
    <li>
      <div><%= User.human_attribute_name(key) %></div>
      <div><%= user.send(key) %></div>
    </li>
  <% end %>
  <!--Ich habe eine Anweisung bekommen, das heutige Wetter auf dem Weg einzugeben-->
  <li>
    <div>das heutige Wetter</div>
    <div><%= Wheather.today %></div>
  </li>
  <% %i[sex_text role].each do |key| %>
    <li>
      <div><%= User.human_attribute_name(key) %></div>
      <div><%= user.send(key) %></div>
    </li>
  <% end %>
</ul>

3. Verwenden Sie Helper

Ich möchte die Beschreibung von HTML nicht dreimal wiederholen, also mache es zumindest zu einer Methode.

class UsersHelper
  def user_param_li(label, value)
    tag.li do
      tag.div(label) +
      tag.div(value)
    end
  end
end
<ul>
  <% %i[name email].each do |key| %>
    <%= user_param_li(User.human_attribute_name(key), user.send(key)) %>
  <% end %>
  <!--Setzen Sie das heutige Wetter auf den Weg-->
  <%= user_param_li('das heutige Wetter', Wheather.today) %>
  <% %i[sex_text role].each do |key| %>
    <%= user_param_li(User.human_attribute_name(key), user.send(key)) %>
  <% end %>
</ul>

4. Bereiten Sie eine Klasse vor

Es ist schwer zu lesen und ich bin traurig, weil ich die Struktur nicht wiederholt sehen kann. Bereiten Sie ein Objekt vor.

#Dieses Objekt ist "Service Object" "Presenter" "view"_Es wird verschiedentlich als "Objekt" und "PORO" bezeichnet.
#Für diese Rolle würde ich es einen Moderator nennen.
class UserParamsPresenter
  attr_reader :user
  def initialize(user)
    @user = user
  end

  def params
    [
      user_param(:name),
      user_param(:email),
      wheather_param,
      user_param(:sex_text),
      user_param(:role),
    ]
  end

  private 

  def wheather_param
    ['das heutige Wetter', Wheather.today]
  end

  def user_param(key)
    [User.human_attribute_name(key), user.send(key)]
  end
end
<ul>
  <!--Dieser Presenter kann auch von der Steuerung übergeben werden. Ich weiß nicht, welches besser ist-->
  <% UserParamsPresenter.new(user).params.each do |label, value| %>
    <%= user_param_li(label, value) %>
  <% end %>
</ul>

5. Ich übertreibe es, also denke ich darüber nach und schreibe es auf leicht verständliche Weise, auch wenn ich nur View betrachte

In diesem Fall wäre es vielleicht nicht so kompliziert gewesen. Der Designer ist in Schwierigkeiten. Ist es in Ordnung, für einen Moment Ruby-Code in erb zu schreiben? Der Moderator kann gelöscht werden.

<%
  user_params = [
    [User.human_attribute_name(:name), user.name)],
    [User.human_attribute_name(:email), user.email)],
    ['das heutige Wetter', Wheather.today],
    [User.human_attribute_name(:sex_text), user.sex_text)],
    [User.human_attribute_name(:role), user.role)],
  ]
%>
<ul>
  <% user_params.each do |label, value| %>
    <%= user_param_li(label, value) %>
  <% end %>
</ul>

6. Wenn es nur hier ist, scheint es einfacher zu sein, überhaupt anzurufen

Ich habe so etwas wie Helper, Draper und I18n gemacht, aber kann ich es ohne es ziemlich gut schreiben? Es ist ein eiliges Projekt.

<%
  user_params = [
    ['Nutzername', user.name],
    ['Mail Adresse', user.email],
    ['das heutige Wetter', Wheather.today],
    ['Sex', user.sex == 1 ? 'männlich' : 'Weiblich'],
    ['Rolle', user.role],
  ]
%>
<ul>
  <% user_params.each do |label, value| %>
    <li>
      <div><%= label %></div>
      <div><%= value %></div>
    </li>
  <% end %>
</ul>

Zusammenfassung

Mit diesem Gefühl kommen mir viele Arten des Schreibens in den Sinn, und ich muss herumgehen. Von diesen ist die einzige Möglichkeit zu entscheiden, welche besser ist, die Marktbedingungen zu betrachten. Wenn es einen Schreibstil gibt, den Sie selbst nicht viel geschrieben haben, versuchen Sie bitte, ihn zu schreiben, indem Sie zuerst Ihre Hand bewegen. Ich werde versuchen, es vorerst zu schreiben, und es wird getestet, ob der Schreibstil angemessen war, indem ich die Spezifikationen nach einigen Wochen und Kommentare von Kollegen ändere.

Recommended Posts

Einige subtil unterschiedliche sich wiederholende Schreibstile in der Rails-Ansicht
Monatskalender in Rails anzeigen
Festlegen der Startansicht in der Rails-App [root]
[Rails] Implementierung von "Benachrichtigung auf irgendeine Weise benachrichtigen"
[Japanische Lokalisierung] i18n-Schienen Nur einfache Anzeige der japanischen Lokalisierungsansicht
Implementieren Sie Iterationen in View, indem Sie eine Sammlung rendern [Rails]