0
我正嘗試用Sinatra創建一個簡單的葡萄酒網絡應用程序。我的葡萄酒模型中的關鍵是「葡萄酒」,「葡萄酒」和「品種」。葡萄酒是一個整數。我還有一個筆記模型供用戶在筆記中添加(目前以逗號分隔,稍後會計劃更加健壯...)。檢測多個條件
這是我WineController內我的POST操作:
post '/wines' do
if params[:wine] == ""
erb :'wines/new'
else
@wine = current_user.wines.new(params[:wine])
@wines = current_user.wines
if @wines.detect{ |wine| wine.vintner.downcase ==
@wine.vintner.downcase && wine.varietal.downcase ==
@wine.varietal.downcase && wine.vintage == @wine.vintage }
flash[:message] = "That wine is already in your cellar! Add another."
erb :'/wines/new'
elsif !params[:note][:name].empty?
params[:note][:name].split(", ").each{ |user_note| @wine.notes <<
Note.find_or_create_by(:name => user_note) }
end
end
@wine.save
redirect to "/wines"
end
我試圖做到的是說「如果已經有與酒商,品種,和老式酒,不產生並使用所述消息重定向回'新'視圖,否則,將註釋添加到該酒實例,保存並重定向到'/ wines/index'「。
然而,葡萄酒保存(筆記並未被保存,雖然),我被重定向到'/葡萄酒/索引'與上述消息。所以,這很奇怪。
我的主要問題是,如何根據三個或更多標準檢測(使用檢測或任何其他方法)。另外,如果任何人有任何洞察我的筆記做錯了,我很樂意聽到!謝謝!!
這可能是一個操作順序問題。嘗試做'(wine.vintner.downcase == @ wine.vintner.downcase)&&(wine.varietal.downcase == @ wine.varietal.downcase)&&(wine.vintage == @ wine.vintage)''。 – moveson
你在使用Active Record嗎? –
從未使用過Sinatra,但確實調用'erb:'/ wines/new''實際上從方法返回?看起來像你打電話,並繼續在所有條件之外的方法底部的'@ wine.save'和'重定向' –