86 votes

Simple_form sans for (formulaire non modèle)

Est-il possible d'utiliser un formulaire simple sans modèle?

https://github.com/plataformatec/simple_form

132voto

htanata Points 11200

Vous pouvez utiliser :symbol comme premier argument.

 <%= simple_form_for :user, :url => '/users' do |f| %>
  <%= f.text_field :name %>
<% end %>
 

Il va sortir le suivant.

 <form method="post" class="simple_form user" action="/users" accept-charset="UTF-8">
  ...
  <input type="text" size="30" name="user[name]" id="user_name">
</form>
 

19voto

Miguel Madero Points 1281

Malheureusement, simple_form repose sur l'utilisation d'un modèle. En gros, il serait bien d’avoir quelque chose comme les méthodes simple_form_tag et input_tag équivalentes à leurs assistants rails * _tag. Jusque-là, le travail est facile.

Utilisez un symbole à la place de la classe dans le formulaire et transmettez explicitement la valeur pour empêcher simple_form d’essayer d’accéder aux propriétés du modèle.

 <%= simple_form_for :user, :url => '/users' do |f| %>
  <%= f.text_field :name, input_html: { value: nil } %>
<% end %>
 

Cela évitera l'erreur undefined method 'name' for User .

5voto

Trung Lê Points 1807

Vous pouvez également passer un :symbol au lieu de @object comme argument de simple_form_for .

 <%= simple_form_for :email, :url => '/post_email' do |f| %>
  <%= f.input :subject, :as => :string %>
<% end %>
 

Ce qui donnerait:

 <form method="post" class="simple_form email" action="/post_email" accept-charset="UTF-8">
  ...
  <input type="text" size="30" name="email[subject]" id="email_subject">
</form>
 

S'il vous plaît être conscient des inconvénients suivants:

  • Vous ne pourrez pas profiter de la validation automatique des modèles
  • Besoin de définir explicitement :url et le type de chaque input

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X