Rails 5.2.0 - скаффолд `form_with` по умолчанию включает` local: true` - PullRequest
0 голосов
/ 26 мая 2018

Когда я строю приложение Rails 5.2.0, мои леса всегда генерируются с опцией local: true, включенной в form_with.

rails g scaffold Article title:string

Созданная форма скаффолда

<%= form_with(model: article, local: true) do |form| %>
  <% if article.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(article.errors.count, "error") %> prohibited this article from being saved:</h2>

      <ul>
      <% article.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

Сгенерированный HTML

<form action="/articles/1" accept-charset="UTF-8" method="post">

Обратите внимание на отсутствие атрибута data-remote

Документация

Я думал, что по умолчанию для form_with в Rails5.1.2+ было использовать удаленные запросы AJAX / xhr с data-remote атрибутами?Другими словами, НЕ включайте параметр local: true.

См .: http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_with

По умолчанию form_with присоединяет атрибут data-remote, отправляющий форму через XMLHTTPRequest в фоновом режимеесли используется ненавязчивый драйвер JavaScript, такой как rails-ujs.См. Опцию: local для получения дополнительной информации.

Примечание - rails-ujs gem был перемещен в сам Rails в 5.2.0 - https://github.com/rails/rails-ujs. Так что, похоже, мне не нужно ничего добавлятьв gemfile, чтобы включить поведение по умолчанию form_with.

Устранение неполадок

Я использую файл шаблона .railsrc и rails для настройки моих лесов rails new.Тем не менее, я попытался отключить и удалить оба файла и по-прежнему получать те же результаты из новых приложений скаффолдинга.

Ответы [ 2 ]

0 голосов
/ 18 июня 2018

Чтобы дать более полный ответ на основании моего комментария, вот как добавить шаблон для настройки частичной формы, сгенерированной Rails при использовании генератора скаффолдов.Здесь я предполагаю, что вы используете ERB, но процедура аналогична, если вы используете что-то вроде slim-rails для настройки ваших генераторов представлений.

Создайте файл в вашем проекте Rails: lib/templates/erb/scaffold/_form.html.erb.tt

Для содержимого этого нового файла хорошее начало - это содержимое существующего шаблона.Вы можете использовать gem which rails, чтобы найти файл, который определяет Rails в вашей текущей среде (с результатом, подобным /home/<user>/.rvm/gems/ruby-2.5.0@<gemset>/gems/railties-5.2.0/lib/rails.rb), и оттуда вы можете найти шаблон формы в railties-5.2.0/lib/rails/generators/erb/scaffold/templates/_form.html.erb.tt.Скопируйте содержимое этого файла в ваш новый шаблон генератора.

Попробуйте внести некоторые изменения в новый файл шаблона, а затем запустите генератор rails scaffold (rails g scaffold foo ...).Ваши изменения должны быть отражены в файле _form.html.erb, созданном генератором.

Имейте в виду, что этот шаблон является «дважды вложенным» ERB, что означает, что он обрабатывается с ERB впервые для создания представлениячастичные, а затем обрабатываются снова каждый раз, когда ваше приложение Rails отправляет с ним запрос.Тем не менее, обычно не слишком сложно сделать простое изменение, такое как удаление local: true из вашего нового шаблона

Подробная информация о настройке генераторов Rails доступна по адресу RailsGuides .

0 голосов
/ 26 мая 2018

Думаю, я нашел ответ - и это просто :) - шаблоны скаффолдов Rails для 5.2.0 явно включают опцию local: true.

5.2.0 Шаблон для форм

<%%= form_with(model: <%= model_resource_name %>, local: true) do |form| %>

Так что я думаю, что они хотели local: true в качестве шаблона по умолчанию для строительных лесов.Возможно для простоты?

Чтобы найти шаблоны генератора скаффолдов

Спасибо за этот пост за помощь в поиске источника: Генератор скаффолдов Override Rails

  • Найдите, где живут ваши драгоценные камни, с помощью команды gem enviornment
  • Я использую rbenv, так что мои находятся в ~/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems
  • cd в этом файле и ищут railties-5.2.0
  • искать в rails/generators/scaffold/templates или просто искать local: true
  • вот путь: ~/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/railties-5.2.0/lib/rails/generators/erb/scaffold/templates/_form.html.erb.tt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...