Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby can';t在Sinatra中使用默认进程转储哈希_Ruby_Sinatra_Datamapper - Fatal编程技术网

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 %>