前提
Ruby on rails でProgateの練習で作るツイッターのようなアプリを模写して作っています。
発生している問題・エラーメッセージ
postのuser_idカラムに@current_user.idをいれようと以下のコードを書いたのですが、新規投稿時にエラーになってしまいます。
ちなみに、ログインした後、すべてのページでログインしているユーザーのID番号が表示されているので@current_userがnilなはずないのですが...
初心者中の初心者でして、、お手数ですが教えていただけると幸いです。
エラーメッセージ↓
undefined method `id' for nil:NilClass
該当のソースコード
sessions_helper.rb
def log_in(user) session[:user_id]=user.id end def current_user @current_user = User.find_by(id: session[:user_id]) end
該当のソースコード
posts_controller.rb
def create @post=Post.new(post_params, user_id: @current_user.id) if @post.save flash[:notice]="Succecefully posted!!" redirect_to users_path else render :new end end
該当のソースコード
application.html.erb
こちらの@current_user.idはただしく表示されます。
<div class="home-menu"> <ul> <li><%= link_to "Create an account", new_user_path %></li> <li><%= link_to "login", login_path %></li> <% if logged_in?%> <li><%= link_to "Index", posts_path %></li> <li><%= link_to "New Post", new_post_path %></li> <li><%= link_to "Our Users", users_path %></li> <li><%= link_to @current_user.id, posts_path %></li> <li><%= link_to "logout", logout_path, method: :delete %></li> <%end%> </ul> </div>
該当のソースコード
application_controller.rb の冒頭
class ApplicationController < ActionController::Base include SessionsHelper end
該当のソースコード
posts_controller.rb の冒頭
class PostsController < ApplicationController before_action :logged_in_user, only:[:edit, :update, :destroy]
###sessions_helper.rb
module SessionsHelper def log_in(user) session[:user_id]=user.id end def current_user @current_user = User.find_by(id: session[:user_id]) end def current_user?(user) if session[:user_id] user == current_user end end def logged_in? !current_user.nil? end def log_out session.delete(:user_id) @current_user=nil end private def logged_in_user unless logged_in? redirect_to login_url end end end
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/09 09:42
2020/06/09 09:47
2020/06/10 01:57
2020/06/10 01:58
2020/06/10 02:06
2020/06/10 02:10 編集
2020/06/10 02:12
2020/06/10 02:13