使用我的 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:
固定的!再次感谢所有贡献答案的人!这是我修复它的方法:
我从控制器中删除了 @user 引用(“显示”操作)。正如下面 Fred 提到的,@user 引用是不需要的,需要删除,因为我使用 :id 两次来引用两个单独的对象。
将“@work”变量编辑为@work = Work.find(params[:id])
。这将根据 ID 查找正确的工作项,无论哪个用户创建了它。
当我需要在工作页面上显示用户数据时,只需使用<%= @work.user.name %>
在 show.html.erb 视图页面上。不需要“@user = User.find(params[:id])”,因为我已经使用“belongs_to :user”在工作模型上定义了外键关系。
再次感谢大家的帮助!
-j