Ruby can';t在Sinatra中使用默认进程转储哈希
可能重复:Ruby can';t在Sinatra中使用默认进程转储哈希,ruby,sinatra,datamapper,Ruby,Sinatra,Datamapper,可能重复: 我正在使用一个简单的Sinatra应用程序,现在我得到了“TypeError at/can dump hash with default proc” 我试图验证一个简单的表单(3个字段),如果有任何错误,请向输入数据的用户显示这些错误 以下是我的Sinatra文件的主要部分(至少所有相关信息): 这是我的模板: <h1><%= @title %></h1> <form action="/" method="post" id="entry"
我正在使用一个简单的Sinatra应用程序,现在我得到了“TypeError at/can dump hash with default proc” 我试图验证一个简单的表单(3个字段),如果有任何错误,请向输入数据的用户显示这些错误 以下是我的Sinatra文件的主要部分(至少所有相关信息): 这是我的模板:
<h1><%= @title %></h1>
<form action="/" method="post" id="entry">
<p>
<label>First Name: </label><br />
<input type="text" name="first_name" id="first_name" />
</p>
<p>
<label>Last Name: </label><br />
<input type="text" name="last_name" id="last_name" />
</p>
<p>
<label>Apple Email Address: </label><br />
<input type="text" name="email" id="email" />
</p>
<p>
<input type="submit">
</p>
<% if @errors %>
<div id="errors">
<%@errors.each do |e| %>
<p><%= e %></p>
<% end %>
</div>
<% end %>
名字:
姓氏:
苹果公司电子邮件地址:
我假设这与现在我正在使用会话并试图跟踪错误有关,但我不知所措。会话似乎不能包含对象,而只能包含字符串。您必须按如下方式更换邮件处理程序:
post '/' do
@entry = Entry.new(:first_name => params[:first_name], :last_name => params[:last_name], :email => params[:email])
if @entry.save
redirect("/thanks")
else
errors = ""
entry.errors.each do |err_msg|
errors << "<p>#{err_msg}</p>\n"
end
session[:errors] = errors
redirect('/')
end
end
然后,由于@errors变量不再是散列,而是一个简单的字符串,因此必须更新视图welcome.erb的结尾:
<% if @errors %>
<div id="errors">
<%= @errors %>
</div>
<% end %>
顺便说一下,您忘记了表单末尾的标记(在之后)
这是“需要‘数据映射器’”而不是“需要‘数据映射器’”)谢谢你抓住了我的一大堆错误。datamapper/data_mapper one解释了很多我还没有尝试过你关于功能方面的建议,正如浮雕所指出的,我们在早些时候的另一篇文章中修复了它我们解决了同样的问题。
get '/' do
@title = "Enter to win a rad Timbuk2 bag!"
@errors = session[:errors]
erb :welcome
end
<% if @errors %>
<div id="errors">
<%= @errors %>
</div>
<% end %>