私はかなり新しく、検索しましたが、この問題を見つけることができませんでした。誰かが私を助けてくれることを願っています。
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])
正しいユーザーを選択するようにこれを変更するにはどうすればよいですか。show アクションで問題が発生しないのはなぜですか?