找不到 id= 的用户 (ActiveRecord::RecordNotFound)

2024-03-24

使用我的 Rails 应用程序,我可以成功创建一个对象(称为工作;将它们视为博客文章)作为 current_user。一个用户 has_many 可以工作。我可以通过使用 postgresql 浏览器检查数据库来验证该对象是否已成功创建。该表还保存了创建该作品的正确 user_id,因此我知道我的创建函数在我的控制器中运行。

然而,问题是,当我尝试查看该作品时,出现以下错误:

WorksController 中的 ActiveRecord::RecordNotFound#show

找不到 id=23 的用户

应用程序/控制器/works_controller.rb:43:在“显示”中

奇怪的是我仍然可以看到我几周前创作的作品。该错误仅出现在我最近创建的作品中。

这是 Works 控制器:

class WorksController < ApplicationController
   #before_filter :current_user,   only: [:edit, :update]

  def index
    @works = Work.all

respond_to do |format|
  format.html # index.html.erb
  format.xml  { render :xml => @works }
end
end
def create
    @work = current_user.works.create(params[:work])
    redirect_to current_user
  end

def edit
    @work = current_user.works.find(params[:id])
end

def new
  @work = current_user.works.new
end

def destroy
  @work = current_user.works.find(params[:id]).destroy
  flash[:success] = "Work deleted"
  redirect_to current_user
end

 def update
    @work = current_user.works.find(params[:id])
    if @work.update_attributes(params[:work])
      flash[:success] = "updated"
      redirect_to @work
    else
      render 'edit'
    end
  end


  def show
    @user = User.find(params[:id])
    @work = @user.works.find(params[:id])
    @activities = PublicActivity::Activity.order("created_at DESC").where(trackable_type: "Work", trackable_id: @work).all

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @work }
    end
  end
end

我假设错误出现在 Works 控制器中。我需要在控制器中编辑什么才能修复“显示”错误?

编辑:如果我使用上面的当前代码,我只能查看其他人的作品(查看我自己的作品会引发错误)。但是,如果我将 current_user 添加到查询中(例如 @works= current_user.works),那么我只能看到我自己的作品。查看其他人的作品会引发错误。我该如何解决这个问题,以便我可以查看自己的作品和其他人创作的作品?

EDIT 2:

如果我从控制器中删除 @user 以及 Works show.html 视图文件中的“@user”引用,@work = Work.find(params[:id]) 就会起作用。但是,我需要控制器中的“@user”引用,因为我想显示创建该作品的用户的名称。我该怎么做呢?

EDIT 3:

固定的!再次感谢所有贡献答案的人!这是我修复它的方法:

  1. 我从控制器中删除了 @user 引用(“显示”操作)。正如下面 Fred 提到的,@user 引用是不需要的,需要删除,因为我使用 :id 两次来引用两个单独的对象。

  2. 将“@work”变量编辑为@work = Work.find(params[:id])。这将根据 ID 查找正确的工作项,无论哪个用户创建了它。

  3. 当我需要在工作页面上显示用户数据时,只需使用<%= @work.user.name %>在 show.html.erb 视图页面上。不需要“@user = User.find(params[:id])”,因为我已经使用“belongs_to :user”在工作模型上定义了外键关系。

再次感谢大家的帮助! -j


在您的显示操作中,一起删除 @user 并仅使用:

@work = Work.find(params[:id])

这将允许任何人查看任何作品。

你的其他行动也是如此。通过说:

@work = current_user.works.find(params[:id])

您正在搜索当前用户的所有作品以查找与id == params[:id].

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

找不到 id= 的用户 (ActiveRecord::RecordNotFound) 的相关文章

随机推荐

  • 为 SSL 配置 MAMP

    好吧 各位编码员 我正在尝试在我的 mac 上使用 SSL 配置 MAMP 以用于开发目的 我已阅读并尝试了以下说明 http www emersonlackey com article mamp with ssl https http w
  • Groovy 执行“cp *”shell 命令

    我想复制文本文件并且仅复制来自src to dst groovy 000 gt cp src txt dst execute text gt groovy 000 gt 您可以看到命令执行时没有错误 但文件src test txt不会被复制
  • 隐藏 webBrowser 控件中的滚动条

    我正在研究 Windows 窗体的 HTML 显示控件 我使用 webBrowser 控件作为控件的基础 我需要隐藏 webBrowser 滚动条 因为它看起来很糟糕 永远不会被使用 并且使控件看起来像网页 从而破坏了布局 目前 滚动条在控
  • .Net core 3:手动添加框架依赖项

    自从3 0版本发布以来 现在可以在 net core中编写WPF应用程序 这真是太棒了 另一方面 在 net core 上 依赖系统现在依赖于完整的框架 不再有多个 nuget 依赖项 除非您想要在同一个应用程序中混合使用 WPF 和 AS
  • Java,BorderLayout.CENTER,获取JPanel的宽度和高度

    我正在使用 Swing 和 AWT 针对听众 制作一个小程序 我在获取 JPanel 名为 Chess 的类 的大小时遇到 问题 我的布局 public class Main extends JFrame implements MouseL
  • 在 Typo3 中实现 HTML 模板,内容不起作用或者是我的错误

    我尝试在typo3中实现html模板 通过本教程 http wiki typo3 org Templated Tutorial Basics http wiki typo3 org Templating Tutorial Basics 所有
  • 使用 xsi:nil="true" C# 序列化删除 xml 元素

    我有一个 XML 其中包含一些值 有时可能存在空值 如下所示 我根本不希望在 XML 中列出带有 null 的节点 元素已设置IsNullable true在课堂里 任何建议 因为我在谷歌中尝试了很多东西 没有任何帮助
  • 更改 pandas 中的默认选项

    我想知道是否有任何方法可以更改 pandas 的默认显示选项 我想在每次运行 python 时更改显示格式和显示宽度 例如 pandas options display width 150 我看到默认值是硬编码的pandas core co
  • 部署.NET Web应用程序时如何获取预编译的razor文件?

    我的任务是改进服务器上应用程序的 IIS 预加载和初始化 我已经在IIS上实现了应用程序初始化和应用程序预加载 但回收 重新启动应用程序池时仍然有很长的等待时间 我找到了一些有用的链接 我认为这些链接对我有帮助 但我仍然没有获得预编译的 R
  • 通过引用切片为不可变字符串,而不是复制

    如果你使用string split http docs python org library stdtypes html str split对于 Python 字符串 它返回字符串列表 这些已拆分的子字符串是其父字符串部分的副本 是否有可能
  • Spring Boot 中的代理设置

    我的应用程序需要从 Web 获取 XML 文件 如下所示 Bean public HTTPMetadataProvider metadataProvider throws MetadataProviderException String m
  • 未排序数组中的前 5 个元素

    给定一个未排序的数组 我们需要以有效的方式找到前 5 个元素 但我们无法对列表进行排序 我的解决方案 找到数组中的最大元素 在 处理 使用此最大元素后删除它 重复步骤 1 和 2 k 次 本例中为 5 次 时间复杂度 O kn O n 空间
  • WooCommerce - 发送有关自定义订单状态更改的自定义电子邮件

    我添加了自定义状态wc order confirmed Register new status function register order confirmed order status register post status wc o
  • OS X Lion 中的 easy_install pip 需要 sudo 吗?

    我从工作中的 Snow Leopard 转到家里的 Lion 安装 我不记得必须 sudo easy install pip 狮子需要这个吗 在我这样做之前我遇到了错误 pip 最终出现在这里 some computer which pip
  • 大规模分布式系统中的日志文件

    我在网格和 HPC 领域做了很多工作 对于分布在数百 或在某些情况下数千 服务器上的系统 我们面临的最大挑战之一是分析日志文件 当前日志文件本地写入每个刀片上的磁盘 但我们也可以考虑使用 UDP Appender 等发布日志信息并集中收集
  • PyDSTool 与 anaconda 未正确安装

    我正在尝试使用 anaconda2 安装 PyDSTool conda install PyDSTool 这似乎进展顺利 但是当我打开spyder并导入PyDSTool时 它给了我错误 import PyDSTool Traceback m
  • “scrollViewDidScroll”无法连续捕获移动

    我正在编写程序来在滚动 UITableView 时移动名为 myView 的 UIView 请看下面的图片 myView 会随着tableview的contentoffset的变化而改变它的 y坐标 我编写的主要代码是 func scrol
  • 使用 Knockout-Kendo.js 动态启用/禁用 kendo 日期选择器

    我正在尝试使用 Knockout Kendo js 根据选择的选定值启用 禁用 kendo 日期选择器 HTML
  • 将我的 HTML Google MAP API 版本 2 迁移到版本 3

    我将非常感谢对此的帮助 我的 html v2 文件和一些临时密钥工作正常 我从一些 XML 中获取位置 创建不同的颜色标记 并从信息窗口中的 XML 属性添加一些 URL 不是太复杂 现在我需要将其迁移到 v3 我找到了 v2 中函数的一些
  • 找不到 id= 的用户 (ActiveRecord::RecordNotFound)

    使用我的 Rails 应用程序 我可以成功创建一个对象 称为工作 将它们视为博客文章 作为 current user 一个用户 has many 可以工作 我可以通过使用 postgresql 浏览器检查数据库来验证该对象是否已成功创建 该