Rails 4-错误消息和所有数据库记录在同一页面上

马修

几天前,我问了一个非常类似的问题,但我仍然不知道该怎么做。我所做的是,在博客的帖子下创建了评论部分,所有评论始终可见,并且我希望我的应用程序在新评论未通过验证时(出现错误时)也显示所有评论,并且我还想在所有数据库记录下看到该错误。我只是一直做不到。

问题是,当我不希望我的应用程序在同一页面上显示所有注释时(我将这部分从我的Learn_webdeb文件中临时删除),

<% @mains.each do |a| %>
            <tr>
                <td><%= a.title %></td>
                <td><%= a.body %></td>
            </tr>
<% end %>

一切正常,当新评论未通过验证时,将显示错误。但是,当我还要在同一页面上显示以前保存的所有数据库记录时,会出现此错误:

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'

在这里,您有我的控制器:

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

我的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.为什么会发生此错误,代码背后发生了什么?

艾拉特·希加波夫(Airat Shigapov)

发生错误是因为您在控制器中调用了此方法

render controller: "mains", action: "learn_webdeb"

render <action>使用实例变量,该实例变量在调用它的地方可用(create在您的示例中为action),而@mains实例变量在您的视图中不可用(因为该变量learn_webdebaction中定义),因此在您的视图中不可用

要解决此错误,您需要致电redirect而不是render

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在create动作中定义并调用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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Ckeditor 4和Rails在同一页面上具有2个具有不同配置的ckeditor

来自分类Dev

Rails 4:仪表板/分析和查询数据库中的所有记录

来自分类Dev

每次单击提交时,Rails 4 Ajax在同一页面上多次渲染部分内容

来自分类Dev

Rails路线,在同一页面上显示所有元素

来自分类Dev

如何在同一页面上显示两个 gmaps4rails 一张普通地图和一张街景(Google Maps and Rails)

来自分类Dev

带有RTL和LTR的CKeditor v4在同一页面上

来自分类Dev

Ruby on Rails-使用同一页面上的广告和图像来改善页面

来自分类Dev

Rails-在同一页面上提交和建立索引

来自分类Dev

Rails Bootstrap 4 错误

来自分类Dev

Rails 4数据建模

来自分类Dev

Rails 4和ActionCable

来自分类Dev

Rails 4:无法将记录保存到数据库

来自分类Dev

没有数据库列的Rails4强参数

来自分类Dev

Rails 4并发数据库索引

来自分类Dev

每个模型的Rails 4数据库

来自分类Dev

Rails 4数据库表

来自分类Dev

没有模型和数据库的Rails 4表单

来自分类Dev

Rails 4一页应用程序联系表

来自分类Dev

如何确定数据库中的记录在Rails的特定列中是否有数据?

来自分类Dev

Rails 4活动记录查询

来自分类Dev

Rails 4不更新记录

来自分类Dev

用rails更新记录4

来自分类Dev

Rails 4缺少模板错误

来自分类Dev

Kaminari on rails4错误

来自分类Dev

rails 4 iframe路由错误

来自分类Dev

Rails 4中的路由错误

来自分类Dev

Rails 4错误:ActiveRecord :: AssociationTypeMismatch

来自分类Dev

Rails 4,ImageMagick和PaperClip

来自分类Dev

Rails 4,recaptcha和turbolinks