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'和'重定向' –