Rails form_tag запись формы - с неактивной моделью записи
Я немного новичок Rails. Я пишу приложение couchrest-rails, поэтому не использую activerecord для этой модели. Я просто понял, что это означает, что
form_for(@model)
не будет работать. Я пытаюсь понять, как использовать form_tag, но большинство примеров не связаны с новыми и создаются действия.
Это неправильно:
<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 %>
Потому что, когда я запускаю свой сценарий Cucumber, я получаю следующее:
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"'
Но я не понимаю ошибку или как ее исправить.
Ответы
Ответ 1
Метод form_tag
не использует конструктор форм, поэтому вы не можете использовать переменную "f" в блоке формы. Вместо f.error_messages
вы должны использовать error_messages_for
и т.д.
<% 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 %>
Тем не менее, может использовать form_for
с объектами без ActiveRecord, им просто нужно ответить на определенные методы. Убедитесь, что эти методы реализованы в модели статьи.
-
id
-
new_record?
-
to_param
-
errors
Это просто предположение о том, что нужно, могут быть и другие. Если они реализованы и ведут себя как ActiveRecord, вы должны использовать form_for
.