为更新和创建生成的URL

时间:2009-09-14 09:03:04

标签: ruby-on-rails

如果我问愚蠢的问题,请原谅我。我创建之后 使用scafolding for article

的控制器,视图和模型

我在新视图和编辑视图中都看到相同的代码。

<% form_for(@article) do |f| %>
  <%= f.error_messages %>
    ..................
  <p>
    <%= f.submit "Updaggggte" %>
  </p>
<% end %>

当我检查这些页面的来源时 新的

<form action="/articles" class="new_article" id="new_article" method="post"><div style="margin:0;padding:0"><input name="authenticity_token" type="hidden" value="757ad93da031eb40a64360318f05e2cc9ada1fc6" /></div>

编辑

<form action="/articles/1" class="edit_article" id="edit_article_1" method="post"><div style="margin:0;padding:0"><input name="_method" type="hidden" value="put" /><input name="authenticity_token" type="hidden" value="757ad93da031eb40a64360318f05e2cc9ada1fc6" /></div>

如何在编辑页面中包含_method隐藏字段?

提前致谢

3 个答案:

答案 0 :(得分:0)

此字段由form_for辅助方法提供。如果是新记录,@aritcle.new_record?将成立,并且由于您使用脚手架设置了应用程序,Article模型将被映射为资源(请查看config/routes.rb),因此,辅助方法将确切地知道它必须用于创建新文章记录的方法。

答案 1 :(得分:0)

嗨感谢您的回复。有了你的答案和这个链接

http://apidock.com/rails/ActionView/Helpers/FormHelper/form_for

我现在能够理解如何生成URL以及如何修改默认行为。

答案 2 :(得分:0)

Rails通过使用名为“_method”的隐藏输入在POST上模拟其他方法来解决此问题,该输入设置为反映所需的方法。 如果@model_obj中使用的对象具有id,则rails将_method设置为PUT,否则POST。 Rails使用new_record?为此目的的方法。