- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用我的 Rails 应用程序,我可以成功创建一个对象(称为工作;将它们视为博客文章)作为 current_user。一个用户 has_many 作品。我可以通过使用我的 postgresql 浏览器检查数据库来验证对象是否已成功创建。该表还包含创建工作的正确 user_id,因此我知道我的创建函数在我的 Controller 中有效。
但是,问题是当我尝试查看作品时,出现以下错误:
WorksController 中的 ActiveRecord::RecordNotFound#show
找不到 id=23 的用户
app/controllers/works_controller.rb:43:在“显示”中
奇怪的是,我仍然可以查看几周前创建的作品。该错误仅出现在我最近创建的作品中。
这是 Works Controller :
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 Controller 中。我需要在 Controller 中编辑什么才能修复“显示”错误?
编辑:如果我使用上面的当前代码,我只能查看其他人的作品(查看我自己的作品会引发错误)。但是,如果我将 current_user 添加到查询中(例如@works= current_user.works),那么我只能看到我自己的作品。查看其他人的作品会引发错误。我该如何解决这个问题,以便我既可以查看自己的作品,也可以查看他人创作的作品?
编辑 2:
@work = Work.find(params[:id]) 如果我从 Controller 中删除 @user 并在 works show.html View 文件中删除“@user”引用,则它会起作用。但是,我需要 Controller 中的“@user”引用,因为我想显示创建该作品的用户的名称。我应该怎么做呢?
编辑 3:
已修复!再次感谢所有贡献答案的人!这是我修复它的方法:
我从 Controller 中删除了@user 引用(“显示”操作)。正如 Fred 在下面提到的,@user 引用不需要并且需要删除,因为我使用 :id 两次来引用两个单独的对象。
将“@work”变量编辑为 @work = Work.find(params[:id])
.这将根据 ID 查找正确的工作项,而不管它是由哪个用户创建的。
当我需要在工作页面上显示用户数据时,只需使用 <%= @work.user.name %>
在 show.html.erb View 页面上。不需要“@user = User.find(params[:id])”,因为我已经使用“belongs_to :user”在工作模型上定义了外键关系。
再次感谢大家的帮助!-j
最佳答案
在你的表演 Action 中,一起摆脱@user,只使用:
@work = Work.find(params[:id])
这将允许任何人查看任何工作。
您的其他操作也是如此。通过说:
@work = current_user.works.find(params[:id])
您正在搜索 current_user 的所有作品以寻找具有 id == params[:id]
的作品。
关于ruby-on-rails - 找不到 id= (ActiveRecord::RecordNotFound) 的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15693479/
我正在尝试在 Windows 上运行的小于 1GB 的 VM 上设置 YouTrack 和 TeamCity。使用率将非常低(用户和请求)。这是一个 POC 环境,如果它有效,我可能会将它推送到一个超
所以我在尝试使用 FORFILES 解决这个问题时遇到了麻烦。我正在尝试获取不超过 4 天的文件。所以基本上少于 4 天。然而,这似乎不太可能,因为/d -4 获取所有 4 天或更早的项目。 以下是我
如何从下面的 events 表中选择小于 15 分钟前创建的 events? CREATE TABLE events ( created_at timestamp NOT NULL DEFAU
Google Analytics Realtime提供 rt:minutesAgo ,可以过滤查询。 然而,它是一个维度而不是一个度量标准,<=不能在过滤器中使用。 假设我想在最后 n 分钟内获得一些
iOS 核心数据 - 严重的应用程序错误 - 尝试插入 nil 你好, 我的应用程序实际上运行稳定,但在极少数情况下它会崩溃并显示此错误消息... 2019-04-02 20:48:52.437172
我想制作一个 html div 以快速向右移动(例如不到 1 秒)并消失。然后1秒后再次直接出现在这个过程最开始div的位置。此过程将由单击按钮并重复 10 次触发。 我试图在 CSS 中使用过渡属性
我发现使用 TimeTrigger 是 Windows 10 (UWP) 上计划后台任务的方式。但是看起来我们需要给出的最小数字是 15 分钟。只是想知道,即使我们安排它在接下来的 1 分钟内运行,警
我必须在 1 秒内在屏幕上打印 2^20 行整数 printf 不够快,还有其他易于使用的快速输出替代方法吗? 每一行只包含 1 个整数。 我要求它用于竞争性编程问题,我必须将其源代码提交给法官。 最
我是一名优秀的程序员,十分优秀!