current_forum や current_forum_thread などのコードを許可する他のモデルに一般化したいので、devise current_user メソッドがどのように機能するかを理解したいと思います。
具体的には、Rails でチャット フォーラムを実装しようとしています。特定のディスカッション スレッドのすべての投稿 (現在はありません) を表示するページがあります。同じページに新しい投稿フォームが埋め込まれています。debug(params) は次を示します。
action: show
controller: discussions
forum_id: '1'
id: '1'
discussion: !ruby/object:Discussion
attributes:
id: 1
title: first discussion (thread)
forum_id: 1
したがって、投稿コントローラーの create メソッドは、ディスカッション ID が何であるかを認識している必要があります。しかし、コントローラー内のこのコードは機能しません。
1. @discussion = Discussion.find(params[:id])
2. @post = @discussion.posts.new(params[:post])
3. if @post.save
4. flash[:success] = "Discussion post created!"
5. redirect_to '#'
6. else
7. render '#'
8. end
行 1. でエラーが発生します。
Couldn't find Discussion without an ID
また、調べてみると、@discussion 変数は常に NIL であることがわかりました。