我在#show页面中有一个页面。我在该页面内创建了一个消息表单。提交时,我收到此错误“路由错误没有路由匹配[POST] / pages / 9”。
所以这是另一个模特展示页面中的一个表格。在这种情况下,它是一个可以在页面显示视图中使用Message模型的表单。
<%= form_for(@message, :url => page_path(@page)) do |f| %>
<div class="field">
<%= f.label :content %><br />
<%= f.text_area :content %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
答案 0 :(得分:1)
你可以使用AJAX 将请求发送到'/ messages'路径,然后在不重新加载页面的情况下接收并显示错误,或更改路线
定义其他路线:
match "pages/:id", :via=>:post, :controller=>"pages", :action=>"create_message"
然后以与常规create_message
操作类似的方式定义操作create
:如果已创建消息,则重定向到/pages/:id
,如果出现错误,请渲染“显示“行动。
如果出现错误,您还应该记住在渲染“show”视图(代码422看起来很好)时返回正确的HTTP状态代码,然后只需进行“显示”视图了解可能的@message
错误消息。
我不确定我是否喜欢这种创建消息的方式(POST /page/3/messages
看起来更像是一个更好的解决方案),但我也不相信这是一件坏事。 ; - )
答案 1 :(得分:0)
指定的网址:
url =&gt; page_path(@page)
应该是用于创建消息的路由。
您可以运行rake routes
来查找您的应用当前拥有的所有路线。
答案 2 :(得分:0)
你给它:url => page_path(@page)
,我假设给你/pages/9
。尝试省略:url。它应该猜测这是一条新消息并带您走上正确的道路。否则,如果你想要显式,它应该是:url => message_path
(注意message_path
没有参数,因为对资源的根路径的POST通常映射到create动作)。
答案 3 :(得分:0)
这不是我想要的,但它现在会做: http://matharvard.ca/posts/2011/aug/22/contact-form-in-rails-3/