2011-07-28 18 views
5

No puedo encontrar soluciones para una pregunta muy simple: "¿Cómo puedo definir mi propio campo de entrada en formtastic?"Agregar un campo de entrada personalizado en formtastic?

Esto es lo que tengo:

<%= semantic_form_for @someFantasticVariable, :url => "/someFantasticUrl.html" do |f|%> 
    <%= f.inputs do %> 
     <%= f.input :something_else_id, :required => true , :as => :select, :collection => SomethingElse.find(:all), :label =>"The something else"%> 
     <%= f.input :fantastic_max_cost, :label => "Budget (max cost)"%> 
    <%end%> 


    <%= f.buttons do%> 
     <%= f.commit_button :button_html => { :class => "primary", :disable_with =>  'Processing...', :id => "commitButton"}%> 
    <%end%> 
<%end%> 

Ahora ..

Quiero tener una cosa muy sencilla. Quiero agregar un campo que no sea parte del modelo. Quiero tener un campo de fecha que pueda usar para calcular algunas cosas en mi controlador. Por eso quiero hacer esto:

<%= f.inputs do %> 
    <%= f.input :something_else_id, :required => true , :as => :select, :collection => SomethingElse.find(:all), :label =>"The something else"%> 
    <%= f.input :fantastic_max_cost, :label => "Budget (max cost)"%> 
    <%= f.input :start_date, :as => :date , :label => "Start date"%> 
<%end%> 

Pero apparetly no se me permite, y no puedo encontrar ninguna manera de hacerlo a través de mi googling empujó. ¿Alguna ayuda/ideas?

Respuesta

6

Si tiene algún atributo que no forma parte de su modelo, a continuación, un getter y setter deben existir en el modelo:

def start_date 
end 

def start_date=(arg) 
end 

A continuación, se puede calcular su personal en un controlador o como se quiera:

... 
puts params[:somefantasticvariable][:start_date] 
... 

Pero esto es un hack Formtastic rápida, debe encontrar alguna forma mejor, al igual que de entrada no Formtastic con un poco de css etc.

+0

Lo que realmente quiero es sólo un parámetro extra al enviar el formulario. Pero veré si esto hará el truco. – Automatico

+0

Funcionó :) Pero parece un hack. Sería bueno si formtastic tuviera una manera fácil de agregar campos que no son parte del modelo. Como ya he dicho. Solo necesito el parámetro cuando envío el formulario, por lo que realmente no pertenece al modelo. Pero esto funciona por ahora. Gracias :) – Automatico

+1

"Si tiene algún atributo que no es parte de su modelo, entonces debería existir un getter y un setter en el modelo" ¿Huh? –

1

Rubí ofrece una base de datos, menos construir ca llene un attr_accessor. Es el equivalente de escribir métodos setter y getter. Formtastic verá este atributo similar a un atributo respaldado por la base de datos.

En su modelo @someFantasticVariable:

attr_accessor :start_date 

Si se utiliza attr_accessible en su modelo @someFantasticVariable, asegúrese de añadir la variable start_date allí también:

attr_accessible :start_date 

Debido a que el atributo es de tipo-menos, Formtastic no puede derivar el campo de entrada HTML para usar. Necesitará configurar manualmente el tipo de entrada usando :as. Para su ejemplo:

<%= f.input :start_date, :as => :date_select %> 

Cite:

Cuestiones relacionadas