爲什麼需要在RESTful控制器中定義一個新方法,並使用create方法進行跟蹤?Rails new vs create
谷歌搜索沒有爲我提供我正在尋找的答案。我瞭解其中的差異,但需要知道爲什麼他們以他們的方式使用。
爲什麼需要在RESTful控制器中定義一個新方法,並使用create方法進行跟蹤?Rails new vs create
谷歌搜索沒有爲我提供我正在尋找的答案。我瞭解其中的差異,但需要知道爲什麼他們以他們的方式使用。
在Rails的REST實施中新的和創建的處理方式不同。
一個HTTP GET到/resources/new
旨在提供適於創建一個新的資源,它通過調用控制器,它創建了一個新的未保存記錄和呈現形式中新行動的形式。
HTTP POST將/resources
取作爲新動作的一部分所創建的記錄,並把它傳遞給控制器,該控制器然後嘗試將其保存到數據庫中的創建動作。
新實例化一個新的Model實例,但直到調用save方法時纔會保存它。
創建與新建一樣,但也將其保存到數據庫。
有時候你想在將某些東西保存到數據庫之前做某些事情,有時候你只是想立刻創建並保存它。
這個問題是關於控制器方法,而不是模型方法。 – sevenseacat 2012-07-25 01:51:38
創建(屬性=無){|對象| ...}
如果驗證通過,則創建一個對象(或多個對象)並將其保存到數據庫中。無論對象是否成功保存到數據庫,都會返回結果對象。
new(attributes = nil){| self if block_given?| ...}
新對象可以被實例化或者爲空(沒有傳遞施工參數)或預先設定屬性,但還沒有被保存(通過匹配相關的表的列名的鍵名的哈希)。在這兩種情況下,有效的屬性鍵都由關聯表的列名確定 - 因此,您不能擁有不屬於表列的屬性。
因此create
實例化新對象,驗證它,然後將其保存到數據庫。而new
只創建本地對象,但不會嘗試驗證或將其保存到數據庫。
當我找到這個頁面時,我一直在尋找你提供的答案。謝謝! – ClosureCowboy 2011-01-26 14:46:51
沒問題,很高興幫助:) – 2011-01-26 15:17:18
這個問題是關於控制器方法,而不是模型方法。 – sevenseacat 2012-07-25 01:51:58
Rails的RESTful部分與HTTP協議的工作方式非常接近。在HTTP協議中,GET請求不應該修改任何數據。從邏輯上講,如果您查看Rails中所有RESTful操作的工作方式,它們將與HTTP操作相匹配。 POST用於生成新數據,因此它是邏輯創建的。您使用GET來提供該表單的版本,換句話說,新的操作。索引和顯示也是GET,update是一個PUT(或Rails 4+中的PATCH),而destroy是一個HTTP中的DELETE。
此外,它很好地分離了控制器中的邏輯,併爲您提供了一種處理錯誤的平滑方法(通過用錯誤消息重新呈現新操作)。
感謝您的解釋,我對這兩者感到困惑。 – Batman 2015-07-06 04:46:57
更多類似這樣的回答;)謝謝! – servatj 2015-11-03 22:28:09
我在rails教程網站上精確地瀏覽了這些信息。直到我真正使用它,它才變得相關。 – StorymasterQ 2016-01-20 01:02:14