Database Rails 4-错误消息和同一页面上的所有数据库记录
几天前我问了一个非常类似的问题,但我还是不知道怎么做。我所做的是,我在我的博客上的帖子下创建了评论部分,所有评论始终可见,我希望我的应用程序在新评论未通过验证(出现错误时)时也显示所有评论,我还希望在所有数据库记录下看到该错误。我只是一直没能做到 问题是,当我不希望我的应用程序在同一页上显示所有注释时 (我从我的learn_webdeb文件中临时删除此部分)Database Rails 4-错误消息和同一页面上的所有数据库记录,database,validation,ruby-on-rails-4,Database,Validation,Ruby On Rails 4,几天前我问了一个非常类似的问题,但我还是不知道怎么做。我所做的是,我在我的博客上的帖子下创建了评论部分,所有评论始终可见,我希望我的应用程序在新评论未通过验证(出现错误时)时也显示所有评论,我还希望在所有数据库记录下看到该错误。我只是一直没能做到 问题是,当我不希望我的应用程序在同一页上显示所有注释时 (我从我的learn_webdeb文件中临时删除此部分) 一切正常,当新注释未通过验证时,将显示错误。但当我还想在同一页面上显示以前保存的所有数据库记录时,我会遇到以下错误: Showing
一切正常,当新注释未通过验证时,将显示错误。但当我还想在同一页面上显示以前保存的所有数据库记录时,我会遇到以下错误:
Showing /home/mateusz/Pulpit/Aptana3_Workspace/My_webpage/app/views/mains/learn_webdeb.html.erb where line #33 raised:
undefined method `each' for nil:NilClass
Extracted source (around line #33):
</thead>
<tbody>
<% @mains.each do |a| %>
<tr>
<td><%= a.title %></td>
<td><%= a.body %></td>
Rails.root: /home/mateusz/Pulpit/Aptana3_Workspace/My_webpage
Application Trace | Framework Trace | Full Trace
app/views/mains/learn_webdeb.html.erb:33:in `_app_views_mains_learn_webdeb_html_erb__2599098263892148643_20921680'
app/controllers/mains_controller.rb:26:in `block (2 levels) in create'
app/controllers/mains_controller.rb:22:in `create'
Showing/home/mateusz/Pulpit/Aptana3_Workspace/My_webpage/app/views/mains/learn_webdeb.html.erb,其中第33行出现:
nil:NilClass的未定义方法“each”
提取的源(第33行附近):
Rails.root:/home/mateusz/Pulpit/Aptana3_Workspace/My_网页
应用程序跟踪|框架跟踪|完整跟踪
app/views/mains/learn_webdeb.html.erb:33:in`` app_views_mains_learn_webdeb_html_erb_25990998263892148643_20921680'
app/controllers/mains_controller.rb:26:in'block(2层)in create'
app/controllers/mains_controller.rb:22:in'create'
这是我的控制器:
class MainsController < ApplicationController
def learn_webdeb
@main = Main.new
@mains = Main.all
end
def motivation
end
def about
end
def books_courses
end
def contact
end
def create
@main = Main.new(main_params)
respond_to do |format|
if @main.save
format.html { redirect_to learn_webdeb_path }
else
format.html { render controller: "mains", action: "learn_webdeb" }
end
end
end
def show
redirect_to :action => "learn_webdeb"
end
private
def main_params
params.require(:main).permit(:title, :body)
end
end
class MainsController“learn\u webdeb”
结束
私有的
def主参数
参数require(:main).permit(:title,:body)
结束
结束
以及我的learn_webdeb视图文件的重要部分:
...
<table class="table">
<thead>
<tr>
<th>Name:</th>
<th>Comment:</th>
</tr>
</thead>
<tbody>
<% @mains.each do |a| %>
<tr>
<td><%= a.title %></td>
<td><%= a.body %></td>
</tr>
<% end %>
</tbody>
</table>
<%= form_for(@main) do |main| %>
<div>
<%= main.label :title %>
<%= main.text_field :title %>
</div>
<div>
<%= main.label :body %>
<%= main.text_area :body %>
</div>
<div>
<%= main.submit "Submit" %>
</div>
<% if @main.errors.any? %>
<div>
<% @main.errors.full_messages.each do |msg| %>
<p><%= msg %></p>
<% end %>
</div>
<% end %>
<% end %>
。。。
姓名:
评论:
谁能给我解释一下:
1.如何消除此错误,并在同一页面上显示所有数据库记录和验证错误?
2.为什么会发生此错误,代码背后发生了什么?您的错误发生是因为您在控制器中调用了此命令
render controller:“mains”,action:“learn\u webdeb”
render
使用实例变量,这些变量在调用它的操作中可用(create
操作在您的示例中),并且@mains
实例变量在此操作中在您的视图中不可用(因为它仅在learn\u webdeb
操作中定义)
要修复此错误,您需要调用重定向
,而不是渲染
:
def create
@main = Main.new(main_params)
respond_to do |format|
if @main.save
format.html { redirect_to @main }
else
format.html { redirect_to learn_webdeb_path }
end
end
end
如果需要在同一页面上显示验证错误,则应在创建操作中定义@mains
,并调用render
,而不是redirect
:
def create
@main = Main.new(main_params)
@mains = Main.all
respond_to do |format|
if @main.save
format.html { redirect_to @main }
else
format.html { render :learn_webdeb }
end
end
end
def create
@main = Main.new(main_params)
@mains = Main.all
respond_to do |format|
if @main.save
format.html { redirect_to @main }
else
format.html { render :learn_webdeb }
end
end
end