CRUD代表創建,讀取,更新,刪除。這是四種方法(如果區分查看一條記錄和查看所有記錄,則爲五條)。在Rails中,處理CRUD的規範方式似乎涉及七種方法。例如,使路由使用resources :orders
速記Order對象產生以下七個路線:Rails CRUD路由和控制器方法最佳實踐
- 指數
- 新
- 創建
- 顯示
- 編輯
- 更新
- 破壞
這是我的困惑之源。對於new
/create
和edit
/update
有什麼獨立的行動/路線?單獨查看頁面的操作與創建數據庫中的記錄有什麼好處?我明白它是如何 Rails中進行,例如:
class OrdersController < ApplicationController
def new
@order = Order.new
render
end
def create
@order = Order.new(order_params)
if @order.save
redirect_to @order, notice: 'Successfully created an order.'
else
render :new
end
end
end
之前使用Rails的工作,我用Yii的(PHP),它有一個內置的生成這樣的代碼CRUD生成器(翻譯成滑軌) :
class OrdersController < ApplicationController
def create
if request.method == "POST"
@order = Order.new(order_params)
if @order.save
redirct_to @order, notice: 'Successfully created an order.'
end
else
@order = Order.new
end
render
end
end
我更喜歡這種模式的原因是因爲它避免了必須爲不同的控制器操作呈現模板。在第一個代碼示例中,用戶轉到orders/new
,併發布到orders/create
。如果驗證失敗,用戶仍然卡在orders/create
,但查看模板orders/new
。這可能會讓用戶感到困惑,而且似乎也打破了單獨查看頁面的操作與在數據庫中創建記錄的整個想法。如果您重定向到orders/new
而不是使用render :new
,那麼您將丟失所有驗證錯誤消息。
我發現自己潛意識地滑回到我的Rails代碼中的Yii方式。任何人都可以解釋爲什麼標準方式有利嗎?如果我偏離規範的Rails模式,是否會遇到任何問題?
StackOverflow警告我這個問題是主觀的,可能會被關閉,所以讓我澄清一下。我並不是試圖討論Rails vs. Yii,或者確定組織CRUD代碼的最佳理論方法。我想知道,如果我偏離了處理CRUD的規範Rails方式,那麼Rails會有什麼破壞。
我不知道它是否會發布任何錯誤,但Ruby On Rails開發中最常用的短語之一是'Convention over Configuration'...我認爲改變此過程並不是很明智一旦遇到困難,將很難獲得幫助,並且會讓其他人更難以閱讀您的代碼/與您協作。 – luissimo
我認爲規範的Rails方式旨在分離關注點,以幫助剛剛開始編寫Web應用程序的人......更像是Web應用程序的構建方式和工作原理......只是將腳本資源和服務器搭起來,正在運行..並且隨着您的應用程序添加功能..您傾向於編寫自定義路線並偏離軌道中的規範化方式。軌道爲此提供了很大的靈活性,我認爲可以這樣做。但是,我不是這方面的專家,我期待着在這篇文章中提供更有見地的答案。 – sa77