我是相当新的并且已经搜索并找不到这个问题。希望有人可以帮助我。
根据 Ruby on Rails 教程,我有一个名为 correct_user 的会话助手。我最初将它放在我的 users_controller 中,但将它移到会话助手中,因为我不仅想在我的 users_controller 和我的 timesheets_controller 中使用 before 过滤器(我在用户输入他们的日常时间时使用它)
这是我的会话助手:
def correct_user
@user = User.find(params[:id])
unless current_user?(@user)
redirect_to(root_url)
end
end
这是我的 timesheets_controller.rb 的相关部分:
before_filter :correct_user, only: [:show, :create]
def new
end
def show
@timesheet = Timesheet.new
@timesheets = Timesheet.paginate(page: params[:page], per_page: 10)
end
def index
@timesheets = Timesheet.paginate(page: params[:page], per_page: 10)
end
def create
@timesheet = current_user.timesheets.create(params[:timesheet])
if @timesheet.save
@timesheet.approved = false
@timesheet.save
flash[:success] = "Timesheet Entered!"
redirect_to current_user
else
render 'show'
end
end
由于某种原因,该节目工作得非常好,但是创建导致抛出错误:
ActiveRecord::RecordNotFound in TimesheetsController#create
Couldn't find User without an ID
Rails.root: /Users/vinaymal/Documents/Vinay/Coding/rails_projects/SSSERP
Application Trace | Framework Trace | Full Trace
app/helpers/sessions_helper.rb:46:in `correct_user'
第 46 行是:
@user = User.find(params[:id])
我该如何修改它以便它选择正确的用户。为什么它不会对表演动作造成问题?