ActiveRecord 产生双重消息

Posted

技术标签:

【中文标题】ActiveRecord 产生双重消息【英文标题】:ActiveRecord producing double messages 【发布时间】:2018-12-01 05:00:47 【问题描述】:

脚手架生成的这段代码最终打印了两次相同的消息,我无法让它停止。

  def update
    respond_to do |format|
      if @indi.update(indi_params)
        puts("message about to be shown to us by the system")
        format.html  redirect_to @indi, notice: 'Indi was successfully updated.' 
        format.json  render :show, status: :ok, location: @indi 
      else
        format.html  render :edit 
        format.json  render json: @indi.errors, status: :unprocessable_entity 
      end
    end
  end

它在网页中打印两次成功消息。

【问题讨论】:

在你的网页视图中你是否渲染了两次通知 不是故意的。这是服务器的一些控制台输出。系统将向我们显示消息 重定向到localhost:3000/indis/48 已完成 302 发现 5ms (ActiveRecord: 0.0ms) 开始 GET "/indis/48" ... IndisController 处理#show as HTML 参数: "id" =>“48”用户负载(0.0ms)选择“用户”。*从Indi负载(0.0毫秒)选择“indis”。*从“indis”到“indis”。“id”=?限制 ? [["id", 48]... 渲染 indis/show.html.erb w/in layouts/application 渲染 indis/show.html.erb w/iin layouts/application [此代码在 application.html.erb

视图顶部有

所以你做了两次,对吧。我在警报成功以及 top of view 中都看到了它。这不是双重渲染的问题吗? 【参考方案1】:

结束问题:

问题在于布局和视图的双重渲染。他有:

<body>
  <% if notice %>
    <p class="alert alert-success"><%= notice %></p>
  <% end %>
  <% if alert %>
    <p class="alert alert-danger"><%= alert %></p>
  <% end %> 
  <%= yield %> 
</body>

show.html.erb的顶部:

<p id="notice"><%= notice %></p>

这导致了notice 的双重显示。修复是简单地从show.html.erb 中删除并在布局中使用它。布局使得这样的代码可以被重用

【讨论】:

以上是关于ActiveRecord 产生双重消息的主要内容,如果未能解决你的问题,请参考以下文章

ruby 使用多态数据库模型自动创建Active Record关联:http://api.rubyonrails.org/classes/ActiveRecord/Associat

导致弃用警告的原因是:ActiveRecord :: Base.raise_in_transactional_callbacks =?

SQL 基准测试:PHP ActiveRecord ORM 与 MySQL 与 CodeIgniter Active Record 与标准 PHP

PostgreSQL ActiveRecord查询优化

为啥所有 Active Record 都讨厌? [关闭]

如何使用 Active Record 查找具有重复数据的记录