Pregunta

Soy un novato en el novato de Rails. Estoy escribiendo una aplicación Couchrest-Rails, así que no estoy usando Activerecord para este modelo. Simplemente descubrí que eso significa que

form_for(@model) 

no funcionará. Estoy tratando de averiguar cómo usar Form_tag, pero la mayoría de los ejemplos no involucran nuevas acciones.

Esto está mal:

<h1>New article</h1>

<% form_tag new_article_url(@article), :method => :post do |f| %>
  <%= f.error_messages %>

  <p>
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </p>
  <p>
    <%= f.submit 'Create' %>
  </p>
<% end %>

<%= link_to 'Back', articles_path %>

Porque cuando ejecuto mi escenario de pepino, obtengo esto:

Scenario: Create Valid Article                            # features/article.feature:16
  Given I have no articles                                # features/step_definitions /article_steps.rb:8
  And I am on the list of articles                        # features/step_definitions/webrat_steps.rb:6
/home/deploy/www/www.trackingplace.com/app/ccc/app/views/articles/new.html.erb:3: warning: multiple values for a block parameter (0 for 1)
from /usr/local/lib/ruby/gems/1.8/gems/actionpack-2.3.3/lib/action_view/helpers/capture_helper.rb:36
When I follow "New Article"                             # features/step_definitions/webrat_steps.rb:18
  You have a nil object when you didn't expect it!
  The error occurred while evaluating nil.error_messages (ActionView::TemplateError)
  features/article.feature:19:in `When I follow "New Article"'

Pero no entiendo el error o cómo solucionarlo.

¿Fue útil?

Solución

los form_tag El método no utiliza un formulador de formulario, por lo que no puede usar la variable "F" en el bloque de formulario. En vez de f.error_messages tienes que usar error_messages_for, etc.

<% form_tag new_article_url(@article), :method => :post do %>
  <%= error_messages_for :article %>

  <p>
    <%= label :article, :title %><br />
    <%= text_field :article, :title %>
  </p>
  <p>
    <%= submit_tag 'Create' %>
  </p>
<% end %>

Dicho esto, tu pueden usar form_for Con los objetos que no son activerecord, solo necesitan responder a ciertos métodos. Asegúrese de que estos métodos se implementen en el modelo de artículo.

  • id
  • new_record?
  • to_param
  • errors

Eso es solo una suposición de lo que se necesita, puede haber otros. Si estos se implementan y se comportan como Activerecord, ¿debería poder usar? form_for.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top