Рельсы 3 помоста и i18n
Когда леса в Rails 3, генератор делает это:
<% if @user.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
<ul>
<% @user.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
Но как насчет i18n? Сообщения переводятся, но почему заголовок в жестком коде? Я должен перевести это вручную? Это не кажется очень сухим?
С Уважением,
Иаков
2 ответа
Вы можете переопределить поведение по умолчанию для скаффолда, загрузив файлы здесь на github и поместив их в свой lib/templates/erb/scaffold
, Когда вы создаете скаффолд, он понимает, что шаблоны есть, и использует их.
<% this code is executed and probably result in html %>
, <%% this is converted to snippet %>
, это было не так сложно, и тогда вы можете выполнить все ваши персонализации, но иметь yml
автоматически сгенерированный файл может быть сложнее, в любом случае вы можете сделать ваши шаблоны почти автоматически.
Чтобы ответить на ваш вопрос, я тоже думаю, что scaffold может быть улучшен, но я читаю везде, где разработчики предпочитают писать свой собственный код с нуля. Поэтому я думаю, что усилия направлены на улучшение других функций. Скаффолд остается, по крайней мере, полезным генератором для понимания и ознакомления с логикой, когда вы начинающий.
Я думаю, что леса - это скорее подсказка, чем окончательный шаблон.
Вы можете добавить перевод, просто заменив "prohibited this user from being saved:"
с t('my_message')
и ддинг 'my_message: whatever'
к en.yml
, При добавлении перевода у вас нет повторений, и сухой принцип безопасен.
Просто оставим комментарий: я редко использую сообщение типа "4 ошибки не позволили этому пользователю быть сохраненным". По моему опыту, чаще всего просто перечислять все произошедшие ошибки и отображать неправильное поле красным цветом.