Rails 3:如何在另一个模型的show方法中提交表单

时间:2011-09-13 21:05:55

标签: ruby-on-rails ruby forms routing

我在#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 %>

4 个答案:

答案 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/