web-dev-qa-db-fra.com

Définissez local: true comme valeur par défaut pour form_with dans Rails 5

Je travaille sur un projet pour lequel nous n'utiliserons pas d'appels ajax pour soumettre les formulaires. Je dois donc mettre local: true dans chaque formulaire du projet, comme indiqué dans les Rails docs :

:local - By default form submits are remote and unobstrusive XHRs. Disable remote submits with local: true.

Est-il possible de définir l'option locale sur true par défaut?

Nous utilisons Rails 5 form_with helper comme ceci:

<%= form_with(model: @user, local: true) do |f| %>
    <div>
        <%= f.label :name %>
        <%= f.text_field :name %>
    </div>

    <div>
        <%= f.label :email %>
        <%= f.email_field :email %>
    </div>
    <%= f.submit %>
<% end %>
9
Ramses

Pensez à remplacer la méthode form_with:

# form_helper.rb
def form_with(options)
  options[:local] = true
  super options
end

Cela devrait résoudre le problème pour chaque formulaire de votre application.

4
Emil Kampp

Comme vous l'avez dit, il peut être défini formulaire par formulaire avec local: true. Pour le définir globalement, utilisez l'option de configuration form_with_generates_remote_forms

https://guides.rubyonrails.org/configuring.html - config.action_view.form_with_generates_remote_forms détermine si formulaire_with génère ou non des formulaires distants. Cette valeur par défaut est true.

Placez-le dans un initialiseur:

# config/initializers/action_view.rb
Rails.application.config.action_view.form_with_generates_remote_forms = false
11
Guy C

Les configurations de rails peuvent être définies dans config/applicaiton.rb

module App
  class Application < Rails::Application
    # [...]

    config.action_view.form_with_generates_remote_forms = false
  end
end

La réponse de Guy C est bonne, mais il est plus idiomatique de mettre toute la configuration dans ce fichier plutôt qu’un initialiseur séparé; C’est là que la plupart des développeurs de Rails s’y attendaient. Notez que cela signifierait un désastre si vous ne le mettez que config/development.rb ou d’autres fichiers spécifiques à env.

1
ecoologic