我有一個Sinatra應用程序控制器,它在Survey
表中創建一個新記錄。這裏是我的ActiveRecord模型,驗證title
獨特性 -如何在Rails/Sinatra中通知用戶重複記錄異常?
class Survey < ActiveRecord::Base
validates :title, uniqueness: true
has_many :questions, dependent: :destroy
belongs_to :user
end
最初,我只是在我的控制器代碼中使用Survey.create
,但事實證明的Rails當用戶輸入一個重複的記錄,它識別爲重複的(因驗證),但然後選擇該特定記錄,然後繼續路由。我不希望發生這種情況。相反,我希望用戶知道該記錄存在,並且必須選擇替代調查標題。這裏是終端輸出I最初曾當I輸入 '飲料'(重複記錄) -
GET /調查/新 查詢參數:{} Requst體PARAMS:{}
POST /調查/新 查詢參數:{} Requst體PARAMS:{ 「survey_title」=> 「飲料」}
D, [--reda #1894] DEBUG -- : (1.6ms) BEGIN
D, [--redacted--- #1894] DEBUG -- : Survey Exists (12.2ms) SELECT 1 AS one FROM "surveys" WHERE "surveys"."title" = 'Beverages' LIMIT 1
D, [--redacted--- #1894] DEBUG -- : (0.7ms) ROLLBACK
爲了防止這種情況,我現在已經在我的控制器代碼(有沒有更好的方式來做到這一點? ) -
post '/surveys/new' do
@survey = Survey.find_by(title: params[:survey_title])
if [email protected]
@survey = Survey.create(title: params[:survey_title], user_id: session[:user_id].to_i)
else
# I want to add a message to the user here
redirect '/surveys/new'
end
session[:survey_id] = @survey.id
redirect to '/surveys/create'
end
此外,理想情況下,我想通過Javascript向用戶發送警報消息,而不必路由到單獨的.erb視圖,然後將其重新路由回頁面。我希望用戶知道標題存在,因此無法創建調查。我該怎麼做呢?我應該舉一個例外嗎?
[sinatra-flash](https://github.com/SFEley/sinatra-flash)是我一直在尋找的。我現在得到了一般想法。謝謝! – user3588841