我有点像Rails的新手。我正在写一个couchrest-rails应用程序,所以我没有使用activerecord这个模型。我只是发现那意味着
form_for(@model)
不起作用。我正在尝试研究如何使用form_tag - 但大多数示例都不涉及new&创造行动。
这是错误的:
<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"'
但是我不明白错误,或者如何解决它。
答案 0 :(得分:16)
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对象,他们只需要响应某些方法。确保在Article模型中实现这些方法。
id
new_record?
to_param
errors
这只是猜测需要什么,可能还有其他人。如果实现了这些并且行为类似于ActiveRecord,那么您应该能够使用form_for
。