Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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 on rails 不明白我为什么';m遇到此类型错误(不能将nil转换为字符串)_Ruby On Rails - Fatal编程技术网

Ruby on rails 不明白我为什么';m遇到此类型错误(不能将nil转换为字符串)

Ruby on rails 不明白我为什么';m遇到此类型错误(不能将nil转换为字符串),ruby-on-rails,Ruby On Rails,我正在尝试实现一个非常简单的过程。 在主页或登录页上,我想捕获电子邮件列表中的电子邮件。 如果电子邮件通过验证,它就会被保存,太棒了!没有错误时,一切正常 出现错误时,如仅输入“a”字符,如下面的日志所示。甚至只是一个空字符串,我不断地得到相同的TypeError(无法将nil转换为字符串) 以下是日志: Started GET "/" for 127.0.0.1 at 2013-06-13 13:48:56 -0400 Connecting to database specified by d

我正在尝试实现一个非常简单的过程。 在主页或登录页上,我想捕获电子邮件列表中的电子邮件。 如果电子邮件通过验证,它就会被保存,太棒了!没有错误时,一切正常

出现错误时,如仅输入“a”字符,如下面的日志所示。甚至只是一个空字符串,我不断地得到相同的
TypeError
(无法将nil转换为字符串)

以下是日志:

Started GET "/" for 127.0.0.1 at 2013-06-13 13:48:56 -0400
Connecting to database specified by database.yml
Processing by HighVoltage::PagesController#show as HTML
Parameters: {"id"=>"home"}
Rendered shared/_error_messages.html.erb (0.4ms)
Rendered layouts/_visitor_form.html.erb (7.9ms)
Rendered pages/home.html.erb within layouts/application (13.1ms)
Completed 200 OK in 82ms (Views: 39.6ms | ActiveRecord: 1.8ms)
[2013-06-13 13:48:57] WARN  Could not determine content-length of response body. Set       content-length of the response or set Response#chunked = true


Started POST "/visitors" for 127.0.0.1 at 2013-06-13 13:48:59 -0400
Processing by VisitorsController#create as HTML
Parameters: {"utf8"=>"✓",authenticity_token"=>"esTPNzNtkmNPTe7Jh+E2aDHNrgocU5Z8g49Nj0QiOhQ=",    "visitor"=>{"email"=>""}, "commit"=>"Add to newsletter list"}
(0.1ms)  begin transaction
Visitor Exists (0.2ms)  SELECT 1 AS one FROM "visitors" WHERE LOWER("visitors"."email") =     LOWER('') LIMIT 1
(0.1ms)  rollback transaction
Completed 500 Internal Server Error in 39ms

TypeError (can't convert nil into String):
app/controllers/visitors_controller.rb:12:in `create'
这是访客(u controller.rb)

 def create
    @visitor = Visitor.new(params[:visitor])
     if @visitor.save
        flash[:success] = "Your email has been added!"
       redirect_to '/'
     else
       render '/'
     end
 end
我也试过了

@visitor = Visitor.new(:visitor => params[:visitor][:email])
还有其他一些没有成功的序列

如何让未成功的保存优雅地显示验证错误并允许用户重新提交

布局如下:

    <%= form_for Visitor.new  do |f| %>
            <%= render 'shared/error_messages' %>
            <%= f.label :email %>
            <%= f.text_field :email %>

    <%= f.submit "Add to newsletter list", class: "btn btn-large btn-primary" %>
    <% end %>

问题是,
呈现“/”
不呈现索引页。必须指定要呈现的操作页面。根据你的路线,这条线应该是这样的:

render 'pages/home'

问题是,
呈现“/”
不呈现索引页。必须指定要呈现的操作页面。根据你的路线,这条线应该是这样的:

render 'pages/home'

粘贴整个回溯。顺便说一句,
呈现“/”意味着什么?我只想回到同一页,那就是“/”。我将此布局放置在主页或登录页上。我认为你走对了,因为我对我的路线不太确定。我的访客没有自己的视图,我也不确定路线。粘贴整个回溯。顺便说一句,
呈现“/”意味着什么?我只想回到同一页,那就是“/”。我将此布局放置在主页或登录页上。我认为你走对了,因为我对我的路线不太确定。我的访问者没有自己的视图,我也不确定路线。我理解你的意思,但因为表单在主页或登录页上,所以基本上“/”我没有:新视图。@JoeCrocetta显示
rake routes
的输出。这有助于把事情弄清楚。我真是个笨蛋。我感谢你的帮助,伊利亚。非常感谢。只是好奇这和TypeError有什么关系(不能将nil转换为字符串)?为什么我不能渲染到“/”,但我可以将_重定向到“/”?@JoeCrocetta当
render
方法试图解析不正确的参数时,会在该方法内部抛出错误。
redirect_to
render
之间的区别在于,第一个选项接受构建地址的选项,而第二个选项需要一些关于如何构建响应体的信息(例如,模板名称)。因此,
/
是一个有效的地址,但不是一个有效的模板名称。我理解您的意思,但因为表单位于主页或登录页上,所以本质上“/”我没有:新视图。@JoeCrocetta显示
rake routes
的输出。这有助于把事情弄清楚。我真是个笨蛋。我感谢你的帮助,伊利亚。非常感谢。只是好奇这和TypeError有什么关系(不能将nil转换为字符串)?为什么我不能渲染到“/”,但我可以将_重定向到“/”?@JoeCrocetta当
render
方法试图解析不正确的参数时,会在该方法内部抛出错误。
redirect_to
render
之间的区别在于,第一个选项接受构建地址的选项,而第二个选项需要一些关于如何构建响应体的信息(例如,模板名称)。因此,
/
是有效的地址,但不是有效的模板名称。