simple_form rails form for ruby-on-rails ruby-on-rails-3 simple-form

ruby on rails - rails - SimpleForm sin for(forma no modelo)



rails forms select (5)

Lamentablemente, simple_form se basa en el uso de un modelo. En esencia, sería bueno tener algo así como los métodos simple_form_tag y input_tag equivalentes a sus rails * _tag helpers. Hasta entonces, hay un trabajo fácil.

Use un símbolo en lugar de la clase en el formulario y pase el valor explícitamente para evitar que simple_form intente acceder a las propiedades del modelo.

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

Esto evitará el undefined method ''name'' for User error de undefined method ''name'' for User .

¿Es posible usar Simple Form (por: Plataformatec) sin un modelo?

https://github.com/plataformatec/simple_form


También podría pasar un :symbol lugar de @object como argumento para simple_form_for .

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

Cuál sería la salida:

<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>

Tenga en cuenta los siguientes inconvenientes:

  • No podrá aprovechar la validación automática del modelo
  • Necesidad de definir explícitamente :url y el tipo de cada input

También puede usar campos fuera del modelo dentro de un modelo de formulario, con simple_fields_for como este:

<%= simple_form_for @user do |f| %> <%= f.input :name %> <%= simple_fields_for :no_model_fields do |n| %> <%= n.input :other_field %> <% end %> <% end %>

Esta es una solución simple y práctica, porque puede crear diferentes tipos de campos de diferentes modelos o sin usar modelos


Todos los métodos anteriores todavía le dejan datos de formulario anidados dentro de "usuario" o cualquier símbolo que pase como primer argumento. Eso es molesto.

Para imitar el estilo / beneficios de simple_form, pero eliminar la dependencia de objeto / símbolo y el anidamiento de datos forzados, puede crear un parcial.

Ejemplos de HAML :

vista de formulario:

= form_tag("path/to/action", method: "POST") do = render "path/to/partial/field", type: "string", required: true, item: "first_name"

field parcial:

- required_string = required ? "required" : "" %div{class: "input #{type} #{required_string} #{item}"} %label{class: "#{type} #{required_string}", for: "#{item}"} - if required %abbr{title: "required"} * = t("application.#{item}") %input{name: "#{item}", | placeholder: t("application.#{item}"), | type: "#{type}", | required: required, | "aria-required" => "#{required}" }


Puede usar :symbol como primer argumento.

<%= simple_form_for :user, url: users_path do |f| %> <%= f.input :name, as: :string %> ... <% end %>

Saldrá algo como esto:

<form novalidate="novalidate" class="simple_form user" action="/users" accept-charset="UTF-8" method="post"> ... <div class="input string required user_name"> <label class="string required" for="user_name"> <abbr title="required">*</abbr> Name </label> <input class="string required" type="text" name="user[name]" id="user_name" /> </div> ... </form>