2012-08-08 68 views

回答

12

如果傳遞給表單對象是persisted?,表單生成器知道你是更新一個對象,並因此將呈現PUT操作。如果它沒有被保存,那麼它知道你正在創建一個新對象,它將使用POST

<%= form_for @user do |f| %> 
    <%= f.button %> 
<% end %> 

如果@user是一個新的記錄,POST使用和按鈕標籤變成Create User,否則使用PUT和標籤變得Update User。沒有更多。

+0

謝謝。我結束了使用created_at,因爲我正在使用客戶端js訪問我的模型,並將@model暴露爲gon的散列。所以我只剩下屬性了。 – Undistraction 2012-08-08 18:19:50

3

表單編輯現有資源使用PUT,表單創建新資源使用POST。按照描述的REST標準here

從軌道form_for助手代碼:

action, method = object.respond_to?(:persisted?) && object.persisted? ? [:edit, :put] : [:new, :post] 

persisted? ActiveRecord的聲明爲:

!(new_record? || destroyed?) 
+0

我的問題是Rails如何決定在表單上設置哪種方法。它用什麼來決定? – Undistraction 2012-08-08 16:11:29

+0

更新了,是你想要的嗎? – PinnyM 2012-08-08 16:15:44

+0

謝謝。害怕@hgmnz雖然擊敗你。 – Undistraction 2012-08-08 18:21:22